2010-12-14 36 views
5

Hibernate có API để đọc giá trị của trường nhận dạng của một thực thể không? Trong trường hợp của tôi, đây sẽ là giá trị Serializable được trả về bởi trường được chú thích với @Id. Ví dụ, giả sử tôi có một thực thể Person:Đọc giá trị nhận dạng đối tượng Hibernate

class Person { 
    @Id private long id; 
    // ... other fields, getters/setters, etc ... 
} 

Person p = new Person(); 
p.setId(42L); 

Hibernate.unknownFunction(p); // returns 42L 

Chắc chắn tôi có thể đọc các chú thích để tìm ra lĩnh vực @Id bản thân mình, nhưng điều này có vẻ như một cái gì đó mà có thể được xây dựng trong

Trả lời

2

session.getIdentifier(object)

Return giá trị định danh của thực thể cho là liên quan đến phiên này. Một ngoại lệ được ném ra nếu cá thể thực thể đã cho là tạm thời hoặc bị tách rời liên quan đến phiên này.

Đối tượng cần có ID và được liên kết với phiên hiện tại, nếu không thì ngoại lệ sẽ được ném. Nhưng điều đó là hợp lý, tôi nghĩ vậy.

0

Tôi không thể nói. 100% không - nhưng tôi thực sự nghi ngờ nó vì không phải tất cả các thực thể đều được chú thích với @Id; có các biến thể khác có thể được sử dụng như @EmbeddedId. Cho điều này, bạn có thể không chỉ sử dụng phản ánh để có được giá trị id của bạn?

2

Vâng, nếu bạn cần một phương thức trả về id trong các lớp tùy ý, hãy thiết kế giao diện để thỏa mãn điều này. ví dụ:

public interface IdHolder { 
    Integer getId(); 
} 

Với giao diện như vậy, bạn có thể thực hiện một số phương pháp tiện ích để lấy lại id từ các lớp tùy ý.

cglib là một cách mạnh mẽ nhưng hơi khó để thực hiện.

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