基于Hibernate Anotation的ID生成策略.docx_第1页
基于Hibernate Anotation的ID生成策略.docx_第2页
基于Hibernate Anotation的ID生成策略.docx_第3页
基于Hibernate Anotation的ID生成策略.docx_第4页
基于Hibernate Anotation的ID生成策略.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于按annotation的hibernate主键生成策略文章分类:Java编程 基于按annotation的hibernate主键生成策略 自定义主键生成策略,由GenericGenerator实现。 hibernate在JPA的基础上进行了扩展,可以用一下方式引入hibernate独有的主键生成策略,就是通过GenericGenerator加入的。 比如说,JPA标准用法 Java代码 1.Id 2.GeneratedValue(GenerationType.AUTO) Id GeneratedValue(GenerationType.AUTO) 就可以用hibernate特有以下用法来实现 Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = assigned) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = assigned) GenericGenerator的定义: Java代码 1.Target(PACKAGE, TYPE, METHOD, FIELD) 2.Retention(RUNTIME) 3.public interface GenericGenerator 4. 5.String name(); 6. 7.String strategy(); 8. 9.Parameter parameters() default ; 10. Target(PACKAGE, TYPE, METHOD, FIELD) Retention(RUNTIME) public interface GenericGenerator String name(); String strategy(); Parameter parameters() default ; name属性指定生成器名称。 strategy属性指定具体生成器的类名。 parameters得到strategy指定的具体生成器所用到的参数。 对于这些hibernate主键生成策略和各自的具体生成器之间的关系,在org.hibernate.id.IdentifierGeneratorFactory中指定了, Java代码 1.static 2. GENERATORS.put(uuid, UUIDHexGenerator.class); 3. GENERATORS.put(hilo, TableHiLoGenerator.class); 4. GENERATORS.put(assigned, Assigned.class); 5. GENERATORS.put(identity, IdentityGenerator.class); 6. GENERATORS.put(select, SelectGenerator.class); 7. GENERATORS.put(sequence, SequenceGenerator.class); 8. GENERATORS.put(seqhilo, SequenceHiLoGenerator.class); 9. GENERATORS.put(increment, IncrementGenerator.class); 10. GENERATORS.put(foreign, ForeignGenerator.class); 11. GENERATORS.put(guid, GUIDGenerator.class); 12. GENERATORS.put(uuid.hex, UUIDHexGenerator.class); /uuid.hex is deprecated 13. GENERATORS.put(sequence-identity, SequenceIdentityGenerator.class); 14. 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); 上面十二种策略,加上native,hibernate一共默认支持十三种生成策略。 1、native Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = native) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = native) 2、uuid Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = uuid) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = uuid) 3、hilo Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = hilo) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = hilo) 4、assigned Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = assigned) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = assigned) 5、identity Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = identity) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = identity) 6、select Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name=select, strategy=select, 3. parameters = Parameter(name = key, value = idstoerung) ) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name=select, strategy=select, parameters = Parameter(name = key, value = idstoerung) ) 7、sequence Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = sequence, 3. parameters = Parameter(name = sequence, value = seq_payablemoney) ) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = sequence, parameters = Parameter(name = sequence, value = seq_payablemoney) ) 8、seqhilo Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = seqhilo, 3. parameters = Parameter(name = max_lo, value = 5) ) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = seqhilo, parameters = Parameter(name = max_lo, value = 5) ) 9、increment Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = increment) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = increment) 10、foreign Java代码 1.GeneratedValue(generator = idGenerator) 2.GenericGenerator(name = idGenerator, strategy = foreign, 3. parameters = Parameter(name = property, value = employee) ) GeneratedValue(generator = idGenerator) GenericGenerator(name = idGenerator, strategy = foreign, parameters = Parameter(name = property, value = employee) ) 注意:直接使用PrimaryKeyJoinColumn 报错(?) Java代码 1.OneToOne(cascade = CascadeType.ALL) 2.PrimaryKeyJoinColumn OneToOne(cascade = CascadeType.ALL) PrimaryKeyJoinColumn 例如 Java代码 1.Entity 2.public class Employee 3. Id Integer id; 4. 5. OneToOne PrimaryKeyJoinColumn 6. EmployeeInfo info; 7. . 8. Entity public class Employee Id Integer id; OneToOne PrimaryKeyJoinColumn EmployeeInfo info; . 应该为 Java代码 1.Entity 2.public class Employee 3. Id 4. GeneratedValue(generator = idGenerator) 5. GenericGenerator(name = idGenerator, strategy = foreign, 6. parameters = Parameter(name = property, value = info) ) 7. Integer id; 8. 9. OneToOne 10. EmployeeInfo info; 11. . 12. Entity public class Employee Id GeneratedValue(generator = idGenerator) GenericGenerator(name = idGenerator, strategy = foreign, parameters = Parameter(name = property, value = info) ) Integer id; OneToOne EmployeeInfo info; . 11、guid Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = guid) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = guid) 12、uuid.hex Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = uuid.hex) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = uuid.hex) 13、sequence-identity Java代码 1.GeneratedValue(generator = paymentableGenerator) 2.GenericGenerator(name = paymentableGenerator, strategy = sequence-identity, 3. parameters = Parameter(name = sequence, value = seq_payablemoney) ) GeneratedValue(generator = paymentableGenerator) GenericGenerator(name = paymentableGenerator, strategy = sequence-identity, parameters = Parameter(name = sequence, value = seq_payablemoney) ) 四、通过GenericGenerator自定义主键生成策略 如果实际应用中,主键策略为程序指定了就用程序指定的主键(assigned),没有指定就从sequence中取。 明显上面所讨论的策略都不满足,只好自己扩展了,集成assigned和sequence两种策略。 Java代码 Java代码 1. publicclassAssignedSequenceGeneratorextendsSequenceGeneratorimplements2. PersistentIdentifierGenerator,Configurable3. privateStringentityName;4. publicvoidconfigure(Typetype,Propertiesparams,Dialectdialect)throwsMappingException5. entityName=params.getProperty(ENTITY_NAME);6. if(entityName=null)7. thrownewMappingException(noentityname);super.configure(type,params,dialect);publicSerializablegenerate(SessionImplementorsession,Objectobj)throwsHibernateExceptionSerializableid=session.getEntityPersister(entityName,obj)getIdentifier(obj,session.getEntityMode();if(id=null)id=super.generate(session,obj);returnid;publicclassAssignedSequenceGeneratorextendsSequenceGeneratorimplementsPersistentIdentifierGenerator,ConfigurableprivateStringentityName;publicvoidconfigure(Typetype,Propertiesparams,Dialectdialect)throwsMappingExceptionentityName=params.getProperty(ENTITY_NAME);if(entityName=null)thrownewMappingException(noentityname);super.configure(type,params,dialect);publicSerializablegenerate(SessionImplementorsession,Objectobj)throwsHibernateExceptionSerializableid=session.getEntityPersister(entityName,obj).getIdentifier(obj,session.getEntityMode();if(id=null)id=super.generate(session,obj);returnid;public class AssignedSequenceGenerator extends SequenceGenerator implements PersistentIdentifierGenerator, Configurable private String entityName; public void configure(Type type, Properties params, Dialect dialect) throws MappingException entityName = params.getProperty(ENTITY_NAME); if (entityName=null) throw new MappingException(no entity name); super.configure(type, params, dialect); public Serializable generate(SessionImplementor session, Object obj) throws HibernateException Serializable id = session.getEntityPersist

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论