我有一个这样的类(具有getter和setter,它们都映射到休眠状态,每个都有对Oracle DB的序列)
public class A{
private B b;
private C c;
}
我正在创建此对象并将其保存到数据库。
所以我创建了一个A对象并用B对象填充它并调用
saveOrUpdate(a)
这样我就可以生成“ a”和“ b”序列。然后我进行一些计算并创建“ C”的实例并将其设置为“ a”
到目前为止,一切都很好。现在,我需要获取“ c”的ID,以便在刷新并提交之前进行一些检查。
但是saveOrUpdate在这里将不起作用,因为该对象不再是瞬态的。根据saveOrUpdate上的休眠文档,“如果对象在此会话中已经存在,则不执行任何操作”
有任何想法吗?
(因为代码太长且凌乱,所以无法发布代码,但基本上就是这样)
最佳答案
如果C是一个休眠映射类,并且正确映射了属性,则当会话刷新或活动事务提交时,休眠将检测到属性C的更改将为您保存。然后可以在提交后获取C的ID。
另一种方法是调用saveOrUpdate(c)。在这种情况下,c会分配一个ID,因此您可以检索它。
您正在做什么检查,需要c的ID?