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

ccgok5k5  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(61)

根据这里的Hibernate开发者指南3.3,Hibernate提供了多种方式来支持生成标识符。但是这是通过使用基于XML的Map。[1]如何使用Annotations来做同样的事情?
特别是我对“增量”类型感兴趣。我发现最接近的方法是使用@GeneratedValue(strategy=GenerationType.AUTO)。但这是一个基于JPA的策略。
我如何使用基于Hibernate的Annotations?
甚至这些信息也没有出现在4.3版的Hibernate开发者指南中!有什么特别的原因吗?

更新

我非常清楚JPA的四种策略。我对Hibernate提供的其他类型感兴趣。像hiloincrement,等等。在文档中,这是通过使用XML配置来完成的。有什么方法可以将其与Annotations一起使用吗?

gjmwrych

gjmwrych1#

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,可以通过传入strategy属性来配置Hibernate特定的生成器

lxkprmvk

lxkprmvk2#

对于Hibernate 4.x,您可以找到4种类型的Generation Types
这是默认策略,可以跨不同的数据库移植。Hibernate根据数据库选择适当的ID。
GeneratorType.IDENTITY -此设置基于某些数据库提供的标识;数据库负责提供唯一标识符。
SEQUENCE --有些数据库提供了一种序列号机制,所以这个设置将允许Hibernate使用序列号。
有时候主键是从另一个表中的唯一列创建的。在这种情况下,使用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

2mbi3lxu

2mbi3lxu3#

这对我很有效:

@Id
@GeneratedValue(generator = "increment")
private int id;

字符串

相关问题