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

标签 hibernate

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

相关文章:

java - 使用 spring 框架 hibernate 的 bootstrap 验证表单

java - 是否可以将枚举值存储在字符串中?

java - 无法 hibernate 以连接到mysql数据库 - Spring

java - 将 hibernate 与 mysql 一起使用

java - 为什么查询时参数是String,String也会转成Long

mysql - 为什么超出max_allowed_pa​​cket?是由于 hibernate 或CP迁移引起的吗​​?

java - 如何在应用程序启动/加载期间执行 SQL 插入查询以填充数据库?

hibernate :batch_size?二级缓存?

java - 创建条件语句,一次查询得到结果和行数

java - 在层次结构的中间类中使用 Hibernate 版本控制