我使用Eclipselink作为我的JPA提供者,如何使字段自动增量?
答案 0 :(得分:2)
我只想要1个实体的自动增量字段。
是的,我明白了,这就是你在问题中所写的内容。但它可以用几种方式解释,重复相同的事情而不澄清没有多大帮助:)
Pascal的工作方式也是如此,或者我必须做的是Bytecode建议,从MyEntity查询select(max)计数器+ 1,得到下一个值,然后将其设置为设计字段,坚持?
如果您想为每个实体记录增加一个字段(例如,Order
的id为1的“计数器”,另一个{id = 2} Order
,我的建议会起作用。
如果您想要一种类似于主键的行为(即自动递增的列),则不会。在这种情况下,标准JPA不提供任何特定功能(标准JPA仅允许GenereatedValue
注释字段上的Id
。我能想到的唯一方法是插入另一个专用实体,以便从中获取主键。
您的确切要求尚不清楚,但我假设您在谈论的是随机字段,而不是主键。在这种情况下,您可以使用生命周期回调方法:
@Entity
public class MyEntity {
...
private int counter;
...
@PrePersist
@PreUpdate
protected void increment() {
counter = counter + 1;
}
}
答案 1 :(得分:2)
JPA 2.0允许您在非id字段中设置auto_increment,只要您在模式中定义自动增量列 - Hibernate / EclipseLink就不会为您执行此操作:
`non_id` bigint(20) DEFAULT NULL AUTO_INCREMENT,
然后在您的实体中:
@Column(name = "non_id")
@GeneratedValue
public void setId(Long id) {
this.id = id;
}
会做到这一点。
答案 2 :(得分:1)
@Harry:遗憾的是,看起来EclipseLink无法使非ID字段自动递增。但看起来OpenJPA确实有这个功能:
答案 3 :(得分:-1)
某些JPA impls允许您在字段上设置GeneratedValue,无论它是否为PK