你會得到一個LazyInitializationException
異常,因爲Hibernate會使用代理對象包裝持久對象。代理爲一個懶惰對象的任何獲得者生成一個異常,即使當LazyReference
已經擁有id
時也是如此。
要獲得id
沒有LazyInitializationException
你可以使用this method(您可以參閱鏈接其他有趣的utilite方法)
@SuppressWarnings("unchecked")
public static <T> T getPid(Persistent<?> persistent) {
if (persistent == null) {
return null;
}
if (!(persistent instanceof HibernateProxy) || Hibernate.isInitialized(persistent)) {
return (T) persistent.getPid();
}
LazyInitializer initializer = ((HibernateProxy) persistent).getHibernateLazyInitializer();
return (T) initializer.getIdentifier();
}
Persistent
是所有persistents的基類。爲了您的LazyReference
你可以重寫這樣的代碼
@SuppressWarnings("unchecked")
public static Long getId(LazyReference persistent) {
if (persistent == null) {
return null;
}
if (!(persistent instanceof HibernateProxy) || Hibernate.isInitialized(persistent)) {
return persistent.getId();
}
LazyInitializer initializer =
((HibernateProxy) persistent).getHibernateLazyInitializer();
return initializer.getIdentifier();
}
的[只是不使用連接在獲得ID列的值可能的複製hibernate對象一對多關係](http://stackoverflow.com/questions/32220951/just-getting-id-column-value-not-using-join-in-hibernate-object-one-to-many-rela) –
感謝您的建議。順便說一句,你提到的問題可能無法清楚地回答任何有我自己的問題的人(雖然我的回答)。答案與LazyInitializationException沒有任何關係,所以當搜索這樣的問題時,人們很難找到它。請在這裏再次回答(@Access),提出另一個問題。 – Mohsen
不客氣。完成後,請參閱下面的答案。 –