gpt4 book ai didi

Java JPA (EclipseLink) 如何在保留实际实体之前接收下一个 GeneratedValue?

转载 作者:行者123 更新时间:2023-11-29 09:20:44 25 4
gpt4 key购买 nike

我正在使用 JPA 的 EclipseLink 实现,但遇到了问题。

这是我的实体类:

@Entity@Table(name = "attendances")public class Attendance implements Serializable {
private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") private Short id;

....

在我的 MySQL 表(即底层数据存储)中,我还设置了 auto_increment 标志。

如何在持久化实体之前获取自动生成的值(id 字段)?所以如果表中有 3 个实体(id IN (1, 2, 3)), 我想得到 4 作为下一个自动生成的值。

我唯一的解决方法是:

  1. 获取具有最大 id 字段的实体的 id。

这就是我能做的吗?

最佳答案

如果使用 JPA 2.0,你可以试试这个,

entityManagerFactory.getPersistenceUnitUtil().getIdentifier(attendance);

免责声明:我自己从未尝试过。

否则,您可以将您的 id 生成策略更改为可以在持久化实体之前为您获取 id 的内容。例如,尝试使用表生成器生成您的 id。在这里,我找到了一个例子,Use Table Generator To Generate ID .然后您就可以直接从该表中读取值。您可能无法使用 @Id 自动处理此问题,准确地说,您最终将自己计算下一个 id。因此,您可以采用相同的想法,但自己完成所有工作并在创建操作时设置 id,不要让 JPA 生成一个。

或者您可能喜欢使用 sequence,如果支持的话。在 sequence 的情况下,您还需要自己获取下一个值并手动设置。准备好在没有插入的情况下松开跳过的 id,或者以某种方式处理它。

或者您对自己所做的事情感到满意。只需注意原子性。或者您可能没有多个事务同时运行的情况。

关于Java JPA (EclipseLink) 如何在保留实际实体之前接收下一个 GeneratedValue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6608993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com