根据Hibernate Developer指南3.3 here,Hibernate以多种方式提供支持以生成标识符。但这是通过使用基于XML的映射。 [1]如何使用Annotations进行相同的操作?
特别是我对'增量'类型很感兴趣。我发现最接近的是使用@GeneratedValue(strategy=GenerationType.AUTO)
。但这是一个基于JPA的策略。
如何使用基于Hibernate的Annotations?
即使这些信息也不存在于4.3版的Hibernate开发人员指南中!有什么特别的原因吗?
更新
我非常清楚JPA提出的四种策略。我对Hibernate提供的其他类型感兴趣。与hilo
,increment
等相同。在文档中,这是通过使用XML配置来完成的。有没有办法将它与Annotations一起使用?
答案 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
。