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

问题描述 投票:0回答:3

根据 Hibernate 开发人员指南 3.3 here,Hibernate 以多种方式提供了生成标识符的支持。但这是通过使用基于 XML 的映射。 [1] 如何使用注解来做同样的事情?
我特别对“增量”类型感兴趣。我发现最接近的是使用

@GeneratedValue(strategy=GenerationType.AUTO)
。但这是基于 JPA 的策略。
如何使用注释来使用基于 Hibernate 的策略?
甚至这个信息也没有出现在 4.3 版本的 Hibernate 开发人员指南中!这有什么特别的原因吗?

更新
我非常了解 JPA 的四个策略。我对 Hibernate 提供的其他类型感兴趣。比如

hilo
increment
等等。在文档中,这是通过使用 XML 配置来完成的。有没有办法将它与注释一起使用?

java hibernate jpa annotations
3个回答
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特定的生成器


2
投票

对于

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


1
投票

这对我有用:

@Id
@GeneratedValue(generator = "increment")
private int id;
© www.soinside.com 2019 - 2024. All rights reserved.