gpt4 book ai didi

Hibernate 自定义 SQL 查询与连接 - 避免返回数组列表

转载 作者:行者123 更新时间:2023-12-03 06:41:43 27 4
gpt4 key购买 nike

我在 Hibernate (3.5.2) 中有一个自定义 SQL 查询,我想在其中返回一个映射对象和一个关联(连接)对象。然而,Hibernate 似乎给了我一个数组列表而不是一个对象列表。

稍微简化一下我的情况:-

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 找不到用于初始化实体2 的字段。

有什么想法吗?我有一个查询可以返回主对象和关联对象的字段,但我希望返回的列表只是 Entity1 对象的列表。

先发制人的评论:是的,我知道我可以重新构造它并以不同的方式进行查询(标准 API 等)。但这就是我目前所坚持的。在这种特殊情况下,我受到一些其他因素的限制,因此希望有某种方式告诉 Hibernate 我想要什么!

谢谢。

最佳答案

这里实体 1(子)包含实体 2(父)的外键,在 Entity1(子)类的 pojo 中应该有一个父类型变量。假设这是“E”,现在查询将是:

Select ent1.* from Entity1 ent1 inner join ent1.E.id

这里 id 是 Entity2 的主键

关于Hibernate 自定义 SQL 查询与连接 - 避免返回数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3117666/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com