0

我有两个实体,“父”和“子”,它们通过双向一对多关系链接,级联属性设置为“全部”。使用下面的代码将 Child 对象添加到 Parent 子集合时,在提交事务之前我无法获取持久子对象的 ID:

Parent p = (Parent) session.load(Parent.class, pid);
Child c = new Child();
p.addChild(c);
// "c" hasn't an ID (is always zero) 

但是,当我通过显式调用 session.save() 方法来持久化子实体时,会立即创建并设置 ID,即使事务尚未提交:

Child c = new Child();
session.save(c);
// "c" has an ID

有没有办法在不调用 session.save() 方法的情况下立即获取子实体的 ID?

谢谢

4

1 回答 1

1

这实际上取决于您使用的 ID 方案。

如果您使用自动增量字段(例如 MySQL、SQL Server),则在保存实体之前不会创建 ID 。

如果您使用序列(例如 Oracle),ID 将在实体持久化时创建。

然后我假设您有一个自动增量字段,在这种情况下答案是:不,如果不保留它,您将无法获得 ID。话虽如此,您实际上大部分时间都不应该需要该 ID。与其他实体的关系被隐式处理。我假设您想要某种 URL 参数或表单字段的 ID?无论如何,是的,您需要保存它。

于 2010-04-07T02:46:52.627 回答