Hibernate如何将分离的对象与瞬态区分开来,我手动设置了id

时间:2017-07-05 02:27:44

标签: java hibernate

Hibernate如何将分离的对象与瞬态对象区分开来,我手动设置了id? 我的意思是,没有咨询数据库。例如,当我尝试持久保存一个我手动设置id的瞬态对象时,Hibernate将如何知道我的对象是瞬态的?或者我的对象将被视为分离对象,因为id不为空?

1 个答案:

答案 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;
}