mysql hibernate id generator_看Hibernate源码之 ID Generator

支持的策略包括:uuid, hilo, assigned, identity, select, sequence, seqhilo, increment, foreign, guid, uuid.hex, sequence-identity.对应这些策略, 可以在org.hibernate.id包下找到, 其中有一个IdentifierGeneratorFactory类用于根据实体类的配置(hbm...
摘要由CSDN通过智能技术生成

支持的策略包括:uuid, hilo, assigned, identity, select, sequence, seqhilo, increment, foreign, guid, uuid.hex, sequence-identity.

对应这些策略, 可以在org.hibernate.id包下找到, 其中有一个IdentifierGeneratorFactory类用于根据实体类的配置(hbm文件的元素或@Id,@GeneratedValue注解)来创建相应的策略.

public final class IdentifierGeneratorFactory {

... //注册所有支持的ID生成策略

private static final HashMap GENERATORS = new HashMap();

static {

GENERATORS.put( "uuid", UUIDHexGenerator.class );

GENERATORS.put( "hilo", TableHiLoGenerator.class );

GENERATORS.put( "assigned", Assigned.class );

GENERATORS.put( "identity", IdentityGenerator.class );

GENERATORS.put( "select", SelectGenerator.class );

GENERATORS.put( "sequence", SequenceGenerator.class );

GENERATORS.put( "seqhilo", SequenceHiLoGenerator.class );

GENERATORS.put( "increment", IncrementGenerator.class );

GENERATORS.put( "foreign", ForeignGenerator.class );

GENERATORS.put( "guid", GUIDGenerator.class );

GENERATORS.put( "uuid.hex", UUIDHexGenerator.class ); // uuid.hex is deprecated

GENERATORS.put( "sequence-identity", SequenceIdentityGenerator.class );

}

...

public static IdentifierGenerator create(String strategy, Type type, Properties params, Dialect dialect)

throws MappingException {

try {

Class clazz = getIdentifierGeneratorClass( strategy, dialect );

...

}

public static Class getIdentifierGeneratorClass(String strategy, Dialect dialect) {

Class clazz = ( Class ) GENERATORS.get( strategy );

...

}

}

显然create()方法是用于创建ID生成器的, 而且用到了参数strategy和dialect. Hibernate在初始化SessionFactory的时候就会准备这些ID生成器. 见以下代码

SessionFactoryImpl(){

...

Iterator classes = cfg.getClassMappings();

while ( classes.hasNext() ) {

Persist

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值