2

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

这是我的实体类:

@实体
@Table(name = "出席人数")
公共类考勤实现可序列化{
私有静态最终长序列版本UID = 1L; @ID @GeneratedValue(策略 = GenerationType.IDENTITY) @基本(可选=假) @Column(name = "id") 私人短 id;

....

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

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

我唯一的解决方法是:

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

这就是我能做的吗?

4

1 回答 1

0

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

entityManagerFactory.getPersistenceUnitUtil().getIdentifier(attendance);

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

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

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

或者你对你正在做的事情很好。只需注意原子性。或者您可能没有同时运行多个事务的情况。

于 2011-07-07T10:26:29.303 回答