2016-09-27 100 views
0

我在寫一個使用Hibernate查詢數據庫(SQL Server)的應用程序。 現在我正在查詢所有項目的鏈接表。休眠中的對象返回列表

查詢看起來像:

"FROM UserRole ur join ur.platformUser join ur.role join ur.company" 

我需要在列表中的所有的UserRole對象,但是當我查詢上述查詢我得到的UserRole,角色,公司與PlatformUser在它的對象對象的arrao。

enter image description here

我只需要使用的UserRole中的UserRole對象中的其他對象的對象。 我如何在Hiernate中解決這個問題,我可以將結果轉化爲前例。 Arraylist<UserRole>

我試過語法如下:

Query query = session.createSQLQuery("select * FROM UserRole ur join PlatformUser pu ON pu.userId = ur.userId join [Role] r ON r.roleId = ur.roleId join [Company] c ON c.companyId = ur.companyId").addEntity(UserRole.class); 

這一行我得到的的UserRole清單,但所有的基本對象是NULL。

回答

1

這可能是因爲你已經將UserRole中的字段映射爲延遲加載? (或者沒有指定,相信延遲加載默認設置)

嘗試沿着

Object obj = userRoles.get(0).getName(); //Or any of the previously null valued fields you have in there 

行寫的東西確保您會話中仍然在寫這個,查詢後最好權。名單();本身

應該延遲加載該值,如果確實如此,請查看初始化hibernate對象。

編輯: 如果你正在尋找一個更合適的方法來做到這一點,實際上有一個hibernate方法請求初始化一個代理對象,我不確定爲什麼它比僅僅獲得你想要初始化的東西更好來自代碼,但它確實更漂亮。

Hibernate.initialize(Object initializeMe) 

但據我所知,這是一個淺層的方法,這意味着它不會加載這個實體。爲了達到這個目的,你需要手工完成,或者創建一個能夠加載所有內容的通用方法,並且想要反射&遞歸。