Hibernate ID生成器通过使用注释“递增”

时间:2015-09-17 12:07:57

标签: java hibernate jpa annotations

根据Hibernate Developer指南3.3 here,Hibernate以多种方式提供支持以生成标识符。但这是通过使用基于XML的映射。 [1]如何使用Annotations进行相同的操作?
特别是我对'增量'类型很感兴趣。我发现最接近的是使用@GeneratedValue(strategy=GenerationType.AUTO)。但这是一个基于JPA的策略。
如何使用基于Hibernate的Annotations?
即使这些信息也不存在于4.3版的Hibernate开发人员指南中!有什么特别的原因吗?

更新
我非常清楚JPA提出的四种策略。我对Hibernate提供的其他类型感兴趣。与hiloincrement等相同。在文档中,这是通过使用XML配置来完成的。有没有办法将它与Annotations一起使用?

2 个答案:

答案 0 :(得分:2)

Hibernate实现JPA并使用JPA id生成策略。

请查看此处的文档4.3: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/:第5.1.2.2节。标识符生成器

Hibernate还提供了@GenericGenerator,可以通过传入策略属性来配置Hibernate特定的生成器

答案 1 :(得分:2)

对于Hibernate 4.x,您可以找到4种Generation Types

  

GeneratorType.AUTO - 这是默认策略,可以移植   不同的数据库Hibernate根据选择适当的ID   数据库中。

     

GeneratorType.IDENTITY - 此设置基于提供的标识   一些数据库;这是数据库的责任   提供唯一标识符。

     

GeneratorType.SEQUENCE -   有些数据库提供了序列号的机制,因此这个设置将允许   Hibernate使用序列号。

     

GeneratorType.TABLE -   有时主键是从另一列中的唯一列创建的   表。在这种情况下,请使用TABLE生成器。

使用Annotations:

如果ID生成策略为NOT SET,则表示您使用的是AUTO Strategy

要使用其他人,请注释:

@Entity(name = "TBL_EMPLOYEE")
public class Employee {
@Id
@Column(name="ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int employeeId =0;
...
}

public class Employee {
@Id
@Column(name="EMPLOYEE_ID")
@GeneratedValue (strategy= GenerationType.SEQUENCE, generator="empSeqGen")
@SequenceGenerator(name = "empSeqGen", sequenceName = "EMP_SEQ_GEN")
private int employeeId =0;
...
 }

public class Employee {
@Id
@Column(name="ID")
@GeneratedValue (strategy= GenerationType.TABLE, generator="empTableGen")
@TableGenerator(name = "empTableGen", table = "EMP_ID_TABLE")
private int empoyeeId =0;
...
}

你也可以使用Composite Identifiers,在这种情况下,我建议你去看书Just Hibernate