2016-09-27 4 views
0

Hibernateを使用してデータベース(SQL Server)を照会するアプリケーションを作成しています。 今、私はすべてのアイテムのリンクテーブルを照会しています。クエリがどのように見えるHibernate内のオブジェクトのリストを返します

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

私は、リスト内のすべてのUserRolesオブジェクトを必要とするが、私は上記のクエリを照会するとき、私はそれでのUserRole、役割、当社及びPlatformUserオブジェクトとオブジェクトのarraoを得ました。

enter image description here

私は唯一のUserRoleオブジェクト内の他のオブジェクトとのUserRoleオブジェクトを必要としています。 これをHiernateでどのように解決すれば、私は結果を元に戻すことができますか? Arraylist<UserRole>?私はUserRolesのリストを得たが、基礎となるすべてのオブジェクトがNULLです。このラインで

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); 

は、私は、次の構文を試してみました。

答えて

1

UserRoleのフィールドを遅延読み込みとしてマップしている可能性がありますか?

(指定されていないか、私は遅延ロードがデフォルトであると信じて)

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

の線に沿って何かを書いてみクエリの後、好ましく右、あなたはまだセッション内でこれを書いていることを確認してください。リスト();それ自体が値を読み込む必要があります。実際にはそうだった場合は、休止状態のオブジェクトの初期化を調べてください。

編集: これを行うより適切な方法を探しているのなら、実際には、プロキシオブジェクトの初期化を要求する休止状態メソッドがあります。初期化したいものを取得するよりも良い理由はわかりませんコードから、それは確かにきれいです。

Hibernate.initialize(Object initializeMe) 
私が知る限り、それは浅い方法です。つまり、内部のエンティティを読み込まないという意味です。これを達成するには、手作業で行うか、すべてをロードする一般的な方法を作るか、反射&は再帰的だと考えてください。

関連する問題