좀 더 구체적인 예를 사용하여 설명하려고합니다. 다음과 같은 시나리오가 있다고 가정 해보십시오.
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User userA = (User)session.get(User.class, 1101);
transaction.commit();
session.close();
// Since session is closed, userA is detached.
session = sessionFactory.openSession();
transaction = session.beginTransaction();
User userB = (User)session.get(User.class, 1101);
//Now here, userB represents the same persistent row as userA.
//When an attempt to reattach userA occurs, an exception is thrown
session.update(userA);
transaction.commit();
session.close();
예외 Detached 객체를 다시 연결하려고하면 userA가 생성됩니다.
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User userA = (User)session.get(User.class, 1101);
transaction.commit();
session.close();
//userA is now detached as session is closed.
session = sessionFactory.openSession();
transaction = session.beginTransaction();
User userB = (User)session.get(User.class, 1101);
User userC = (User)session.merge(userA);
if (userB == userC) {
System.out.println("Reattched user is equal");
}
transaction.commit();
session.close();
이 링크가 유용 할 수있다 : 다음과 같이
상기 문제를 해결하기 위해, 병합()가 이용된다 http://stackoverflow.com/questions/ 161224/what-are-the-different-between-the-different-saving-methods in -hibernate – Gaurav