JPA:如何使字段自动递增

标签 jpa mysql eclipselink auto-increment

我使用 Eclipselink 作为我的 JPA 提供程序,我如何使字段自动递增?

最佳答案

I just want an auto-increment field for 1 entity.

是的,我明白了,这就是您在问题中所写的内容。但它可以有多种解释方式,重复同样的事情而不加澄清也无济于事:)

So does Pascal's way work or I have to do what Bytecode suggest, query select (max) counter + 1 from MyEntity, to get the next value, then set it to the design field, the persist?

如果您想为每个实体记录增加一个字段(例如,id=1 的Order 的“计数器”,Order 的另一个“计数器” > with id=2),我的建议是可行的。

如果您想要类似于主键的行为(即自动递增的),它不会。在这种情况下,标准 JPA 不提供任何特定设施(标准 JPA 仅允许 GenereatedValueId 注释字段上)。我能想到的唯一方法是插入另一个专用实体以从中获取主键。


您的确切要求尚不清楚,但我假设您是在谈论随机字段,而不是主键。在这种情况下,您可以使用生命周期回调方法:

@Entity
public class MyEntity {
    ...
    private int counter;
    ...

    @PrePersist
    @PreUpdate
    protected void increment() {
         counter = counter + 1;
    }
}

关于JPA:如何使字段自动递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3832739/

相关文章:

java - 使用其他框架的类不好吗?

mysql - 解释 SQL 和查询优化

php - 如何在zend框架work2中使用左连接编写计数查询?

jpa - JPQL 中的转义字符

java - 获取映射通过引用应用程序启动时的未知目标实体属性异常

java - 使用 JAXB 和 MOXy 将 Java 属性映射到多个 xml 属性

ejb-3.0 - EJB3 中的嵌入式对象继承

java - 启用 JPA 静态编织(eclipselink)

java - 如何从子元素 JPA 加入

java - Hibernate:java.lang.IllegalArgumentException:无法设置 int 字段