我在Hibernate(3.5.2)中有一個自定義SQL查詢,我想在其中返回一個映射對象和一個關聯(連接)對象。但是,Hibernate似乎給了我一個數組列表而不是對象列表。加入Hibernate自定義SQL查詢 - 避免返回數組列表
爲了簡化我的情況有點: -
ENTITY1包含一個外鍵ENTITY2,並映射對象設置,以便ENTITY1有一個對象的屬性引用ENTITY2。我想檢索一個Entity1對象列表,但關聯的對象引用已經被初始化(以便關聯的對象已經被加載)。現在
,我可以用自定義的SQL查詢這樣做:
final SQLQuery qry = hibernateSession.createSQLQuery(
"select {entity1.*}, {entity2.*} from entity1 inner join entity2 on entity1.fk = entity2.id ");
qry.setReadOnly(true);
qry.addEntity("entity1", Entity1.class);
qry.addJoin("entity2", "entity1.entity2");
List list = qry.list(); // Returns list of arrays!!
這工作,在所有的ENTITY1對象正確初始化。但是,我返回的列表不是Entity1對象的普通列表。它實際上是一個數組列表,其中每個數組包含2個元素 - Entity1和Entity2。我假設這是因爲我已經在SELECT子句中放置了兩個別名條目。
如果我刪除第二個別名(對於Entity2),我只是得到「列未找到」的錯誤 - 大概是因爲Hibernate無法找到字段來初始化entity2。
任何想法?我有一個查詢可以返回主要和關聯對象的字段,但我希望返回列表只是Entity1對象的列表。
先發制人的評論:是的,我知道我可能可以重新構造這個,並以不同的方式(標準API等)進行查詢。但這是我目前所堅持的。在這種特殊情況下,我受到其他一些因素的制約,所以希望有一些方法可以告訴Hibernate我想要什麼!
謝謝。
的主鍵,你specifially要與原生SQL查詢要做到這一點,或將HQL嗎? – 2013-08-25 20:59:12
您可以使用HQL在未映射的關係上執行內部連接,如下所示:'select * from Entity1 e1,Entity2 e2 where e1.fk = e2.id'。 [這可悲的不適用於外連接](http://stackoverflow.com/questions/9892008/hql-left-join-of-un-related-entities)。 – r0estir0bbe 2014-07-21 11:19:11
在HQL中這很容易,您的查詢中哪些內容不能用HQL完成? – 2015-10-09 04:39:49