我在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