2010-12-14 61 views
5

Hibernate是否具有讀取實體標識字段值的API?在我的情況下,這將是由@Id註釋的字段返回的Serializable值。例如,假設我有一個Person實體:閱讀Hibernate實體標識值

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

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

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

當然,我能讀註釋找到@Id場我自己,但是這似乎喜歡的事,可能是建在

回答

2

session.getIdentifier(object)

返回作爲與該會話相關聯的所述給定實體的標識符值。如果給定的實體實例是暫時的或與此會話相關聯,則拋出異常。

該對象需要有一個ID,並與當前會話相關聯,否則引發異常。但我認爲這是合乎邏輯的。

0

我不能說。 100%不 - 但我真的懷疑它,因爲並非所有實體都注有@Id;還可以使用其他變體,如@EmbeddedId。鑑於此,你不能僅僅使用反射來獲得你的id值嗎?

2

那麼,如果你需要一個在任意類中返回id的方法,設計一個接口來滿足這個要求。例如:

public interface IdHolder { 
    Integer getId(); 
} 

通過這樣的接口,您可以製作一些實用的方法來從任意類中檢索id。

cglib是一個強大的,但有點棘手的方式來做到這一點。