根据 Hibernate 开发人员指南 3.3 here,Hibernate 以多种方式提供了生成标识符的支持。但这是通过使用基于 XML 的映射。 [1] 如何使用注解来做同样的事情?
我特别对“增量”类型感兴趣。我发现最接近的是使用
@GeneratedValue(strategy=GenerationType.AUTO)
。但这是基于 JPA 的策略。更新
我非常了解 JPA 的四个策略。我对 Hibernate 提供的其他类型感兴趣。比如
hilo
、increment
等等。在文档中,这是通过使用 XML 配置来完成的。有没有办法将它与注释一起使用?
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特定的生成器
对于
Hibernate 4.x
,您可以找到4种类型的Generation Types
GeneratorType.AUTO - 这是默认策略,可以跨平台移植 不同的数据库。 Hibernate根据ID选择合适的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
。
这对我有用:
@Id
@GeneratedValue(generator = "increment")
private int id;