使用休眠将 null 保存为 id

Clo*_*mez 5 java null hibernate jpa

我处于一个奇怪的位置,我需要保存@Id一个@Entityasnull

整个项目是使用休眠和实体构建的。但是对于这个遗留实体,表本身有一个触发器来生成 ID。

因此,尝试插入除 null 之外的任何内容都会导致错误。

当尝试.save()使用 null id 的实体时,hibernate 会抛出

org.springframework.orm.jpa.JpaSystemException: ids for this class must be manually assigned before calling save()
Run Code Online (Sandbox Code Playgroud)

编辑:

澄清一下,我需要.save()在 ID 列为空的地方做,因为:

表中的触发器将(在任何插入之前)检查 ID 是否为空,然后执行 SELECT 以获取最后一个 ID 并将其增加 1,最后将此新行插入到表中。如果 ID 不为空,触发器将出错。

Mac*_*ski 3

只需将 id 标记为由底层数据库自动生成即可:

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private Long id;
Run Code Online (Sandbox Code Playgroud)

GenerationType.IDENTITY通常是为 PK 设置为的情况而设计的auto increment,但是从 JPA 的角度来看,它只是将生成 id 的职责移交给了数据库引擎。在你的情况下,通过使用触发器就会发生这种情况。