- 9.2.4. 注解(Annotation)使用方法
@REntity
@RId
@RIndex
@RObjectField
@RCascade
9.2.4. 注解(Annotation)使用方法
@REntity
仅适用于类。通过指定@REntity
的各个参数,可以详细的对每个RLO类实现特殊定制,以达到改变RLO对象的行为。
- namingScheme - 命名方案。命名方案规定了每个实例在Redis中对应key的名称。它不仅被用来与已存在的RLO建立关联,还被用来储存新建的RLO实例。默认采用Redisson自带的
DefaultNamingScheme
对象。 - codec - 编码解码器。在运行当中,Redisson用编码解码器来对RLO中的每个字段进行编码解码。Redisson内部采用了实例池管理不同类型的编码解码器实例。Redisson提供了多种不同的编码解码器,默认使用
JsonJacksonCodec
。 - fieldTransformation - 字段转换模式。如上所述,为了尽可能的保证RLO的用法和普通Java对象一致,Redisson会自动将常用的普通Java对象转换成与其匹配的Redisson分布式对象。这是由于字段转换模式的默认值是
ANNOTATION_BASED
,修改为IMPLEMENTATION_BASED
就可以不转换。
@RId
仅适用于字段。@RId
注解只能用在具备区分实例的字段上,这类字段可以理解为一个类的id
字段或主键字段。这个字段的值将被命名方案namingScheme
用来与事先存在的RLO建立引用。加了该注解的字段是唯一在本地JVM里同时保存赋值的字段。一个类只能有一个字段包含@RId
注解。
可以通过指定一个生成器generator
策略来实现自动生成这个字段的值。默认不提供生成器。
@RIndex
仅适用于字段。用来指定可用于搜索的字段。可以通过RLiveObjectService.find
方法来根据条件精细查找分布式实时对象。查询条件可以是含(IN)
,或(OR)
,和(AND)
或相等(EQ)
以及它们的任意组合。
使用范例如下:
public class MyObject {
@RIndex
String field1;
@RIndex
String field2;
@RIndex
String field3;
}
Collection<MyObject> objects = RLiveObjectService.find(MyObject.class, Conditions.or(Conditions.and(Conditions.eq("field1", "value"), Conditions.eq("field2", "value")), Conditions.in("field3", "value1", "value2"));
@RObjectField
仅适用于字段。允许通过该注解中的namingScheme
或codec
来改变该字段的命名或编码方式,用来区别于@REntity
中指定的预设方式。
@RCascade
仅适用于字段。用来指定包含于分布式实时对象字段内其它对象的级联操作方式。
可选的级联操作方式为如下:
RCascadeType.ALL - 执行所有级联操作RCascadeType.PERSIST - 仅在执行RLiveObjectService.persist()
方法时进行级联操作RCascadeType.DETACH - 仅在执行RLiveObjectService.detach()
方法时进行级联操作RCascadeType.MERGE - 仅在执行RLiveObjectService.merge()
方法时进行级联操作RCascadeType.DELETE - 仅在执行RLiveObjectService.delete()
方法时进行级联操作