我处于一个奇怪的位置,我需要保存@Id
of an @Entity
as null
整个项目是使用 hibernate 和实体构建的。但对于这一遗留实体,表本身有一个触发器来生成 ID。
因此,尝试插入除 null 之外的任何内容都会导致错误。
当试图.save()
具有 null id 的实体,hibernate 将抛出
org.springframework.orm.jpa.JpaSystemException: ids for this class must be manually assigned before calling save()
EDIT:
澄清,我需要做.save()
其中 ID 列为空,因为:
表中的触发器将(在任何插入之前)检查 ID 是否为空,然后执行 SELECT 来获取最后一个 ID 并将其加 1,最后将此新行插入到表中。如果 ID 不为空,则触发器将出错。
只需将 id 标记为由底层数据库自动生成即可:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
GenerationType.IDENTITY
通常设计用于 PK 设置为auto increment
但是,从 JPA 的角度来看,它只是将生成 id 的职责移交给了数据库引擎。在您的情况下,通过使用触发器就会发生这种情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)