java - Hibernate 结果列表转换以获取行

标签 java sql hibernate

您好,我在迭代 Hibernate ResultList 时遇到问题

我遵循了从外部类获得的查询:

queryContent = "select distinct c.identity, c.number, c.status, ctr.name, aab.paymentConditions.currency       from AgreementStateBean ast       join ast.currentAgreement aab       join conagr.contract c  where c.agreementStateId = ?   and con.mainContractor = true ? "

我必须对整个 aab. paymentConditions.currency 求和,检查法规和名称的数量。

我想通过迭代结果列表来做到这一点:

    Query q = session.createQuery(queryContent); 
    List result = q.list();
    Long wholeCurrency, numberOfStatutes;

    for(Object res : result){
        //wholeCurrency += res.getColumnName?
    }

我的问题是如何转换 res 对象才能获得具体的列值?我读过有关在 hibernate 查询中创建映射的内容,但我不知道通过添加

来修改查询字符串是一个好习惯
   "new map(" prefix and then ")" 

来自sql语句之前

解决方案:

毕竟我决定在查询中使用 map 。我通过添加 hibernate map 语句来修改我的外部查询,方法是将 select 替换为 'select new map(' 和 from ') from'。 额外的事情是添加带有键名称的“as”语句,因为没有它们列键就是整数。 所以毕竟我的查询如下所示:

"select new map( distinct c.identity, c.number, c.status as status, ctr.name as name, aab.paymentConditions.currency as currency  )    from AgreementStateBean ast       join ast.currentAgreement aab       join conagr.contract c  where c.agreementStateId = ?   and con.mainContractor = true ? "

这对我来说是最合适的解决方案,我按照 Kostja 的建议尝试使用“NEW com.example.MyClass”,但就我而言,我无法控制传入查询,因此我不能依赖永久构造函数。

new List( select... 

也很感兴趣,但它也没有告诉我我的职位可以为我提供信息。

最佳答案

如果我理解正确的话,您希望得到结果的类型化表示,而不是它本身是一个实体。为此,您可以使用构造函数查询:

"SELECT NEW com.example.MyClass( e.name, e.data) FROM Entity e"

MyClass 必须有一个匹配的构造函数。据我所知,完全资格(com.example)不是强制性的。

如果您经常使用此查询,在数据库中创建 View 可能是个好主意。您可以将 View 映射到实体,就像它是常规表一样,但请注意,您无法通过映射 View 存储对数据的更改。

编辑:结果是,mapping to an unspecified Map is alright with Hibernate :

选择新 map (mother为mother,offspr为offspr,mate为mate)

关于java - Hibernate 结果列表转换以获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25378732/

相关文章:

java 8 - Arrays.stream().filter 过滤掉空字符串并转换为数组

sql - 如何通过 Oracle regexp_replace 从空格分隔列表中删除重复项?

hibernate - 使用Hibernate/GORM导致java.sql.BatchUpdateException错误

mysql - 更新 JPA 实体因空值而失败

Java 使用 Steams VS TreeMap 对 map 进行排序

Java : Compare all values of nested hashmap

mysql - 创建表的 SQL 错误

Java JPA/Hibernate级联删除

java - 我应该在哪里创建新实体 - 是否在表示层?

SQL 'like' 表达式匹配所有 varchar 值(即没有完成实际过滤)?