Hibernate如何将分离的对象与瞬态对象区分开来,我手动设置了id? 我的意思是,没有咨询数据库。例如,当我尝试持久保存一个我手动设置id的瞬态对象时,Hibernate将如何知道我的对象是瞬态的?或者我的对象将被视为分离对象,因为id不为空?
答案 0 :(得分:2)
瞬态 - 如果对象刚刚被实例化,则它是瞬态的 使用new运算符,它与Hibernate无关 会话。它在数据库中没有持久表示,没有 标识符值已分配。
Detached - 一个分离的实例是一个持久的对象, 但其会议已经结束。对象的引用仍然是 当然有效,甚至可以修改分离的实例 这个州。
Hibernate api有类ClassMetadata和方法getIdentifier,你可以检查你的实体的阶段。
SessionFactory sb f = HibernateUtil.getSessionFactory();
ClassMetadata metadata = sf.getClassMetadata(data.getClass());
if(metadata.getIdentifier(data) == null) {
return TRANSIENT;
}