@Id
Enhancement
增强方面@Id属性会被区别对待,它们从来不会调用延迟加载。
生成值
当对一个数字类型或者UUID类型的属性加入@Id注解,Ebean会自动分配一个Id generator属性。 意味着Ebean会冗余的添加@GeneratedValue注解
@Id
Long id;
// ... is effectively the same as
@Id @GeneratedValue
Long id;
UUID
如果@Id类型为UUID,则Ebean会自动分配一个合适的ID生成到该属性。
数据库平台
所有支持Identity或Sequence(或同时支持)的数据库,Ebean都会基于数据库选择合适的Id生成策略
| 数据库 | 策略 |
|---|---|
| H2 | Sequences |
| Postgres | Identity (as serial, also supports sequences) |
| MySql | Identity |
| Oracle | Sequences |
| DB2 | Identity (also supports sequences) |
| SQL Server | Identity |
| SQLite | Identity |
| SqlAnywhere | Identity |
自定义ID生成
Ebean支持注册和使用自定义ID
1. 实现com.avaje.ebean.config.IdGenerator
public class ModUuidGenerator implements IdGenerator {
@Override
public Object nextValue() {
return ModUUID.newShortId();
}
@Override
public String getName() {
return "shortUid";
}
}
2. 通过ServerConfig注册 通过ServerConfig调用addClass()或者add(IdGenerator idGenerator)或者setIdGenerators(List idGenerators)注册IdGenerator
注意:如果是通过classpath 扫描发现实体Bean,也会自动寻找IdGenerator的实现,并注册,在这种情况下,你不需要通过ServerConfig手动注册
3. @GeneratedValue 之后我们可以通过@GeneratedValue注解告诉eban使用自定义的IdGenerator
@Id @GeneratedValue(generator = "shortUid")
String id;