Я тестирую 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();
}
Не обновляется для case B
(tag.setName("B")
не работает).
Тогда я раскомментирую session.update(tag);
в case B
, теперь это работает. Должно выдавать ошибку из-за того, что объект не объединен с транзакцией case B
.
Мы можем сказать, что используем factory.getCurrentSession()
, поэтому нет необходимости объединять его, но если заменить его на factory.openSession();
и закрывать сеанс после каждого случая, он все еще работает (с вызовом update в case B
). Так в каком смысле мы называем объект обособленным?