2009-05-14 40 views
5

Chế độ ngủ đông có cung cấp phương thức trả về trạng thái của đối tượng (tạm thời, liên tục, tách rời) không?Lấy trạng thái đối tượng

+0

Imho bạn không thể thiết kế, tuy nhiên +1 vì đây là một vấn đề thú vị – dfa

Trả lời

3

thấy Javadoc Hibernate Session và kiểm tra các phương pháp

  • chứa - Kiểm tra xem trường hợp này được kết hợp với phiên này.
  • getIdentifier - Trả về giá trị số nhận dạng của thực thể nhất định được liên kết với phiên này. Cẩn thận với Ngoại lệ được ném nếu Thực thể không được liên kết, mỗi Ngoại lệ phải được coi là gây tử vong và Phiên không được sử dụng sau khi nó
  • get - Trả về thể hiện dai dẳng của lớp thực thể đã cho với số nhận dạng đã cho hoặc null nếu không có ví dụ liên tục như vậy.

tôi sẽ sử dụng 'get' và hơn nữa kiểm tra cho các giá trị thay đổi, sau đó nó chỉ là một "saveOrUpdate" để tồn tại hoặc cập nhật (và tái đính kèm) đối tượng thực tế

3

Session.contains cho bạn biết nếu một đối tượng được kết hợp với phiên. Nếu nó không có số nhận dạng, nó sẽ tạm thời, nếu nó có một số nhận dạng và được kết hợp với phiên, liên tục. Mã định danh nhưng không được liên kết với phiên, được tách ra.

Nếu điều đó không hiệu quả, hãy xem xét việc lặp lại câu hỏi của bạn với nhiều ngữ cảnh hơn, đó là, tại sao bạn cần biết trạng thái của một vật thể ngay từ đầu?

0

Tôi không đồng ý với việc sử dụng session.contains(obj) để hiển thị trạng thái đối tượng ngủ đông. Một đối tượng trước đây vẫn kiên trì/tải sẽ được giả định là thoáng qua sau khi một cuộc gọi đơn giản của session.clear() - nếu bạn đã không có khóa chính nhưng là một hỗn hợp bạn không có ý tưởng mà nhà nước đó là ...

Một cách tiếp cận chính xác có thể được tìm thấy bên trong Hibernate 3: org.hibernate.engine.ForeignKeys.isTransient(...)

Các vấn đề liên quan