我正在测试Hibernate,以下是情况和代码:
public static void main(String[] args) {
SessionFactory factory = HibernateUtil.getSessionFactory();
Tag tag;
// (case A)
Session session = factory.getCurrentSession();
Transaction tx = session.beginTransaction();
tag = (Tag) session.get(Tag.class, 1);
tag.setName("A");
tx.commit();
// session is automatically closed since it is current session and I am committing the transaction
// session.close();
//here the tag object should be detached
//(case B)
session = factory.getCurrentSession();
tx = session.beginTransaction();
// tag = (Tag) session.merge(tag); // I am not merging
tag.setName("B"); //changing
// session.update(tag);
tx.commit();
// session.close();
}
对于案例B
,它不进行更新(tag.setName("B")
无法工作)。
然后我取消注释case B
中的session.update(tag);
,现在它可以正常工作。由于对象未合并到case B
事务中,应该会产生错误。
我们可以说我们正在使用factory.getCurrentSession()
,因此不需要合并它,但是如果将其替换为factory.openSession();
并在每个案例后关闭会话,它仍然可以正常工作(在case B
中调用update)。那么我们所说的对象分离是指什么意思呢?