JPA:如何使字段自动增量

时间:2010-09-30 16:30:16

标签: jpa mysql eclipselink auto-increment

我使用Eclipselink作为我的JPA提供者,如何使字段自动增量?

4 个答案:

答案 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)

答案 3 :(得分:-1)

某些JPA impls允许您在字段上设置GeneratedValue,无论它是否为PK