Tôi sẽ cố gắng giải thích bằng cách sử dụng ví dụ cụ thể hơn. Giả sử bạn có một kịch bản như sau:
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();
Ngoại lệ khi cố gắng gắn lại đối tượng được tách rời, userA được tạo.
Exception in thread "main" org.hibernate.NonUniqueObjectException: a
different object with the same identifier value was already associated
with the session:
This is because Hibernate is enforcing that only a single instance of a Persistent object exists in memory.
Để khắc phục vấn đề trên, sáp nhập() được sử dụng, như hình dưới đây:
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();
Liên kết này có thể hữu ích: http://stackoverflow.com/questions/ 161224/what-are-the-different-giữa-the-khác nhau-tiết kiệm-phương pháp-trong-hibernate – Gaurav