0

我有表使用触发器和序列来设置它的 PK 列。

其 Pk 的 Hibernate 映射策略是assigned..

这会在session.save(obj)返回对象中产生id=0

如何使其返回正确分配的 PK 值。

session.getIdentifier()不工作!

4

1 回答 1

2

assigned表示:没有人生成 ID,ID 在实体中明确设置,然后再持久化。

你想做的事是不可能的。Hibernate 必须在不知道其 ID 的情况下插入实体,然后数据库将生成 ID,而 Hibernate 必须从数据库中重新加载实体以知道其 ID。但是它如何在不知道实体 ID 的情况下重新加载实体?

本机生成器做同样的事情,它之所以有效,是因为数据库提供了getLastGeneratedId()一种允许获取数据库生成的 IOD 的方法。但是你不能用 Oracle 和触发器来做到这一点。

从数据库中删除触发器,使用序列生成器,一切都会好起来的。

于 2012-06-27T12:29:57.083 回答