@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生成到该属性。

数据库平台

所有支持IdentitySequence(或同时支持)的数据库,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;

results matching ""

    No results matching ""