已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 畜禽屠宰无害化处理工岗前工作效率考核试卷含答案
- 水工监测工工作合规知识考核试卷含答案
- 化工吸收工岗前安全实践考核试卷含答案
- 飞机系统安装调试工岗中操作安全考核试卷含答案
- 混凝土搅拌工改进水平考核试卷含答案
- 2025年铜仁地区沿河土家族自治县四下数学期末检测试题含答案
- 2025年邵阳市邵东县四下数学期末调研模拟试题含答案解析
- 2026事业单位笔试-安徽-安徽中药制药(医疗招聘)历年参考题库含答案详解
- 2025年迭部县三年级数学下学期期中质量跟踪监视试题含解析
- 2026年上海市人教版高中英语第3单元期末试卷
- 1.2小学科学苏教版(新教材)六年级上册第一单元第2课《燃烧与空气》课件(含AI赋能)
- 北森测评题库及答案2026
- T/CGCC 23-2018奢侈品鉴定技术规范
- 公司碳排放管理制度
- 器件应力降额及关键用法规范
- 2.1世界的物质性 课件-2024-2025学年高中政治统编版必修四哲学与文化
- 游乐设备设计中的人体工程学应用
- 高中数学必修二(人教A版2019)课后习题答案解析
- 《兽医基础》教案
- 新概念英语第二册单词表默写纸
- (完整)AED的使用课件
评论
0/150
提交评论