2011-01-12 40 views
8

我有一個Spring 3 + JPA 2.0應用程序。在我的@Controller我需要一個初始化對象,但我有代理,我需要能夠以編程方式初始化它。我需要類似於org.hibernate.Hibernate.initialize(Object)的功能。如何強制初始化Hibernate JPA代理以在JSON調用中使用它

有人可以幫忙。該對象用於AJAX操作。如果屬性是代理服務器,我無法將其作爲JSON發送。

回答

4

沒有我知道的JPA選項。您應該使用Hibernate.initialize(..)。實際上,當我看看hibernate的實現時,懶惰集合似乎在很多情況下都是初始化的,而不是人們所期望的。像entityManager.contains(..)Persistence.getPersistenceUtil().isLoaded(...)。試一試,但我認爲你不應該依賴這樣的實現細節。

+0

是的,謝謝,雖然這可能是這種情況。我不想創建其他對象,然後將其發送到視圖。由於我們仍然在項目的早期階段,因爲JPA原因並未堅持,所以我們決定遷移到休眠狀態。現在對於所有的hibernate用戶,只需使用`Hibernate.initialise(..)` – pmanolov 2011-01-25 15:27:49

0

我們在我們的應用程序中做了類似的事情,我們發現分割我們的數據庫實體對象併爲JSON輸出提供另一堆類很有用。

如果您使用的是JSON的框架,只是檢查你的對象和夾頭了一些JSON爲每個屬性的對象上,然後能夠有對象,如:

PersonEntity - 類由JPA 管理PersonJsonOutput - 專爲JSON輸出設計的類

從長遠來看可能會更安全。這樣可以讓數據庫更改不會自動反映到JSON服務中,您可能希望版本化JSON服務,而不是在數據庫實體更改時立即破壞舊版本。

它也給你的發言權日期格式條款或迫使數你JSON輸出的更多控制數據庫在你的JSON等字符串...

這個答案真的只是取決於你如何」重新生成你的JSON,但這聽起來像你的圖書館做了一些反省。

0

我知道已經晚了,答案是公認的,但另一個標準JPA的方法是調用大小()方法要初始化從DAO返回對象之前,名單上:

Object.getList().size(); 

這可以節省你不得不作弊和使用特定於實現的機制來初始化

相關問題