JPA实体注解与hibernate主键生成策略
<wbr><wbr>用hibernate注解开发项目,对于主键的生成策略有些模糊,下面是从新浪网里面看到的一篇关于hibernate注解以及主键生成策略的文章,值得一看:</wbr></wbr>
<wbr><wbr></wbr></wbr>
1. 实体标志:
<wbr><wbr><wbr></wbr></wbr></wbr>@Entity
<wbr><wbr><wbr>@Indexed(index="group")<br><wbr><wbr><wbr>@Table(name="GROUP_LAYMOD")</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr>* @Indexed 标识需要进行索引的对象,<br><wbr><wbr><wbr>* 属性 : index 指定索引文件的路径 @DocumentId 用于标示实体类中的唯一的属性保存在索引文件中,是当进行全文检索时可以这个唯一的属性来区分索引中其他实体对象,一般使用实体类中的主键属性<br><wbr><wbr><wbr>* @Field 标注在类的get属性上,标识一个索引的Field<br><wbr><wbr><wbr><wbr><wbr>属性 : index 指定是否索引,与Lucene相同<br><wbr><wbr><wbr><wbr><wbr>store 指定是否索引,与Lucene相同<br><wbr><wbr><wbr><wbr><wbr>name 指定Field的name,默认为类属性的名称<br><wbr><wbr><wbr><wbr><wbr>analyzer 指定分析器</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
在hibernate注解主键的时候,一般会使用到这两个。
<wbr><wbr>@GeneratedValue的作用是JPA的默认实现自定义主键生成策略<br><wbr><wbr>@GenericGenerator是hibernate在JPA的基础上增强。</wbr></wbr></wbr></wbr>
自定义主键生成策略,由@GenericGenerator实现。
hibernate在JPA的基础上进行了扩展,可以用一下方式引入hibernate独有的主键生成策略,就是通过@GenericGenerator加入的。
比如说,JPA标准用法
@Id<wbr><wbr><br>
@GeneratedValue(GenerationType.AUTO)<wbr><wbr><br><br>
就可以用hibernate特有以下用法来实现<br><br><strong>@GeneratedValue(generator<wbr>=<wbr>"paymentableGenerator")<wbr><wbr><wbr><wbr><wbr><br>
@GenericGenerator(name<wbr>=<wbr>"paymentableGenerator",<wbr>strategy<wbr>=<wbr>"assigned")<wbr><wbr><br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></strong><br><br>
@GenericGenerator的定义:<br><br>
@Target({PACKAGE,<wbr>TYPE,<wbr>METHOD,<wbr>FIELD})<wbr><wbr><wbr><br>
@Retention(RUNTIME)<wbr><wbr><wbr><br>
public<wbr>@interface<wbr>GenericGenerator<wbr>{<wbr><wbr><wbr><br><wbr><wbr><br>
String<wbr>name();<wbr><wbr><wbr><br><wbr><wbr><br>
String<wbr>strategy();<wbr><wbr><wbr><br><wbr><wbr><br>
Parameter[]<wbr>parameters()<wbr>default<wbr>{};<wbr><wbr><wbr><br>
}<wbr><wbr><br><br><br>
name属性指定生成器名称。<br>
strategy属性指定具体生成器的类名。<br>
parameters得到strategy指定的具体生成器所用到的参数。<br><br>
对于这些hibernate主键生成策略和各自的具体生成器之间的关系,在org.hibernate.id.IdentifierGeneratorFacto<wbr>ry中指定了,<br><br>
static<wbr>{<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("uuid",<wbr>UUIDHexGenerator.class);<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("hilo",<wbr>TableHiLoGenerator.class);<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("assigned",<wbr>Assigned.class);<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("identity",<wbr>IdentityGenerator.class);<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("select",<wbr>SelectGenerator.class);<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("sequence",<wbr>SequenceGenerator.class);<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("seqhilo",<wbr>SequenceHiLoGenerator.class);<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("increment",<wbr>IncrementGenerator.class);<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("foreign",<wbr>ForeignGenerator.class);<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("guid",<wbr>GUIDGenerator.class);<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("uuid.hex",<wbr>UUIDHexGenerator.class);<wbr>//uuid.hex<wbr>is<wbr>deprecated<wbr><wbr><wbr><br><wbr><wbr><wbr>GENERATORS.put("sequence-identity",<wbr>SequenceIdentityGenerato<wbr>r.class);<wbr><wbr><wbr><br>
}<wbr><wbr><br><br>
上面十二种策略,加上native,hibernate一共默认支持十三种生成策略。<br><br>
1、native<br>
Java代码<br>
@GeneratedValue(generator<wbr>=<wbr>"paymentableGenerator")<wbr><wbr><wbr><wbr><wbr><br>
@GenericGenerator(name<wbr>=<wbr>"paymentableGenerator",<wbr>strategy<wbr>=<wbr>"native")<wbr><wbr><wbr><br><br>
2、uuid<br>
Java代码<br>
@GeneratedValue(generator<wbr>=<wbr>"paymentableGenerator")<wbr><wbr><wbr><wbr><wbr><br>
@GenericGenerator(name<wbr>=<wbr>"paymentableGenerator",<wbr>strategy<wbr>=<wbr>"uuid")<wbr><wbr><wbr><br><br>
3、hilo<br>
Java代码<br>
@GeneratedValue(generator<wbr>=<wbr>"paymentableGenerator")<wbr><wbr><wbr><wbr><wbr><br>
@GenericGenerator(name<wbr>=<wbr>"paymentableGenerator",<wbr>strategy<wbr>=<wbr>"hilo")<wbr><wbr><wbr><br><br>
4、assigned<br>
Java代码<br>
@GeneratedValue(generator<wbr>=<wbr>"paymentableGenerator")<wbr><wbr><wbr><wbr><wbr><br>
@GenericGenerator(name<wbr>=<wbr>"paymentableGenerator",<wbr>strategy<wbr>=<wbr>"assigned")<wbr><wbr><wbr><br><br>
5、identity<br>
Java代码<br>
@GeneratedValue(generator<wbr>=<wbr>"paymentableGenerator")<wbr><wbr><wbr><wbr><wbr><br>
@GenericGenerator(name<wbr>=<wbr>"paymentableGenerator",<wbr>strategy<wbr>=<wbr>"identity")<wbr><wbr><wbr><br><br>
6、select<br>
Java代码<br>
@GeneratedValue(generator<wbr>=<wbr>"paymentableGenerator")<wbr><wbr><wbr><br>
@GenericGenerator(name="select",<wbr>strategy="select",<wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr>parameters<wbr>=<wbr>{<wbr>@Parameter(name<wbr>=<wbr>"key",<wbr>value<wbr>=<wbr>"idstoerung")<wbr>})<wbr><wbr><br><br>
7、sequence<br>
Java代码<br>
@GeneratedValue(generator<wbr>=<wbr>"paymentableGenerator")<wbr><wbr><wbr><br>
@GenericGenerator(name<wbr>=<wbr>"paymentableGenerator",<wbr>strategy<wbr>=<wbr>"sequence",<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
相关推荐
04_JPA详解_第一个JPA实例与JPA主键生成策略.zip
总结一下关于JPA的主键生成策略,JPA是用@GeneratedValue标记来注释的。一般的我把主键生成分成两大类。第一个就是简单的单字段主键类型,一个就是复杂的复合主键类型。我们分2种情况分别讨论。 第一种单字段主键...
04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略
NULL 博文链接:https://1028826685.iteye.com/blog/1523349
持久化类主键生成策略+例子 jpa 4种 hibernate 13种
本文档简单描述了注解实现联合主键类的生成
JPA注解创建数据库表 和hibernate.cfg.xml 建表
只要1分就可获得JPA主键生成策略,很全的哦
JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第4讲 第一个JPA实例与JPA主键生成策略.avi
Hibernate开发讲义JPA注解.ppt
JPA(Java Persistence API)是 EJB 3.0 新引入的数据持久化编程模型。JPA 充分利用了注释(Annotation)和对象/关系映射,为数据持久化提供了更简单、易用的编程...OpenJPA 中支持四种不同的实体标识自动生成策略:
NULL 博文链接:https://h-z.iteye.com/blog/2157698
web开发的技术文档 集成了不少web开发框架的API 方便查阅
Hibernate之JPA注解
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA支持XML和JDK5.0注解两种元数据的形式。 JPA的总体思想和现有Hibernate、TopLink、...
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA支持XML和JDK5.0注解两种元数据的形式。 JPA的总体思想和现有Hibernate、TopLink、...
本资源为原创. 其中剖析了hibernate+JPA对主键的生成方式的分类,以及在真实项目中如何使用,并且剖析各种数据库间的主键序列(sequence)原理以及使用.
Hibernate5.1.fianl整合JPA注解方式异常:persistence.Table.indexes()[Ljavax/persistence/Index;
主要介绍了java hibernate使用注解来定义联合主键的相关资料,需要的朋友可以参考下