2011-11-08 41 views
9

Nếu bạn tải một thực thể từ db và sửa đổi nó bằng cách nào đó, sẽ sử dụng hibernate bằng/hashCode để so sánh trạng thái hiện tại của thực thể với ảnh chụp nhanh của nó để xác định xem có cần thực hiện cập nhật sql không?Cách sử dụng hibernate bằng() và hashCode()?

Nếu nó làm như vậy, tôi có một câu hỏi khác: nếu bằng sẽ trả về true, sẽ hibernate nghĩ rằng thực thể không thay đổi hoặc cố gắng sử dụng nó mặc định comprasion (để chắc chắn)?

Trả lời

9

Vui lòng xem Equals and HashCode từ trang web Cộng đồng JBoss. Từ đó:

Để tránh vấn đề này, chúng tôi khuyên bạn sử dụng các "bán" -unique thuộc tính của lớp dai dẳng của mình để thực hiện equals() (và hashCode()). Về cơ bản, bạn nên nghĩ đến số nhận dạng cơ sở dữ liệu của mình vì không có ý nghĩa kinh doanh nào cả (hãy nhớ rằng, các thuộc tính định danh thay thế và giá trị được tạo tự động được đề xuất). Cơ sở dữ liệu thuộc tính định danh chỉ nên là một mã định danh đối tượng, và về cơ bản chỉ nên được sử dụng bởi Hibernate. Tất nhiên, bạn cũng có thể sử dụng số nhận dạng cơ sở dữ liệu làm tiện ích chỉ đọc thuận tiện, ví dụ: để xây dựng các liên kết trong các ứng dụng web.

Nói cách khác, Hibernate sử dụng equals và hashCode để nhận dạng, không phải để xem một đối tượng đã được sửa đổi hay chưa. Nó sử dụng thuộc tính bằng cách so sánh thuộc tính cho điều đó.

+1

Không thấy bằng chứng cho thấy Hibernate sử dụng equals() và hashCode() trong trích dẫn này và tại trang – Lu55

3

Không phải là chuyên gia Hibernate, nhưng bạn có thể tìm thấy phần this của sự khai sáng thủ công.

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