Tại sao tôi cần dòng "session.save (người dùng);" trong đoạn mã sau? Tôi nghĩ, với cuộc gọi tìm người dùng đã được đính kèm vào phiên và các thay đổi sẽ được theo dõi và cam kết. Bạn có muốn giải thích chi tiết cho tôi không? Hay tôi cần một cấu hình đặc biệt hoặc các trường hợp khác mà tôi có thể nghe nói về 'tính năng' này?Tại sao tôi cần phải tiết kiệm một cách rõ ràng sau khi tìm thấy với Hibernate?
session = createSession();
ta = session.beginTransaction();
assertEquals(1, session.createCriteria(MyUser.class).list().size());
// find one user
MyUser user = session.createCriteria(MyUser.class).uniqueResult();
user.setName("Rocker!");
// ### HERE ###
// WHY this 'save' is necessary!!??
session.save(user);
ta.commit();
ta = session.beginTransaction();
assertEquals(1, session.createCriteria(MyUser.class).list().size());
MyUser user = session.createCriteria(MyUser.class).uniqueResult();
assertEquals("Rocker!", user.getName());
ta.commit();
CẬP NHẬT 1
Cùng một câu hỏi áp dụng cho
- session.save (người sử dụng);
- user.setName ("Rocker!");
- ta.commit();
UPDATE 2
Giải pháp cho vấn đề là: Tôi đang sử dụng Guice/warp tồn tại. Và trong một số trường hợp, tôi đã chặn không chính xác khối mã vào giao dịch qua @Transactional: do đó giao dịch được thực hiện quá sớm và do đó thay đổi riêng biệt không được bao gồm trong cam kết. Cảm ơn các bạn! Vì vậy, luôn luôn chắc chắn rằng bạn biết về phạm vi giao dịch của bạn trong trường hợp bạn đang sử dụng lò xo hoặc Guice ...
bạn đã bật đăng nhập ngủ đông để kiểm tra xem điều gì sẽ xảy ra giữa sự trở lại từ uniqueresult() và commit()? –
Tôi luôn làm điều đó với 'tiết kiệm' rõ ràng những tháng cuối cùng với chế độ ngủ đông. cho đến ngày hôm nay: nơi tôi tự hỏi điều này. Tôi sẽ xem xét các bản ghi. Nhưng hãy nhìn vào bản chỉnh sửa của tôi bên dưới mã: việc lưu rõ ràng cũng cần thiết sau khi tôi đã gọi tiết kiệm – rocker
cũng bất cứ khi nào một cái gì đó hoạt động trong một thời gian dài "cho đến ngày hôm nay" và mã không thay đổi, nó ngụ ý một số cấu hình ở nơi khác đã thay đổi - hãy chắc chắn xem lại chính xác những gì đã thay đổi trong toàn bộ dự án/ứng dụng kể từ trạng thái làm việc đã biết cuối cùng. Rõ ràng mọi thứ không chỉ ngừng hoạt động. –