我有表使用触发器和序列来设置它的 PK 列。
其 Pk 的 Hibernate 映射策略是assigned
..
这会在session.save(obj)
返回对象中产生id=0
如何使其返回正确分配的 PK 值。
session.getIdentifier()
不工作!
assigned
表示:没有人生成 ID,ID 在实体中明确设置,然后再持久化。
你想做的事是不可能的。Hibernate 必须在不知道其 ID 的情况下插入实体,然后数据库将生成 ID,而 Hibernate 必须从数据库中重新加载实体以知道其 ID。但是它如何在不知道实体 ID 的情况下重新加载实体?
本机生成器做同样的事情,它之所以有效,是因为数据库提供了getLastGeneratedId()
一种允许获取数据库生成的 IOD 的方法。但是你不能用 Oracle 和触发器来做到这一点。
从数据库中删除触发器,使用序列生成器,一切都会好起来的。