【问题标题】:Hibernate is not returning fields with null values in the resultsetHibernate 不返回结果集中具有空值的字段
【发布时间】:2014-07-05 00:17:44
【问题描述】:

我有这个存储库调用:

@Query("select t1.field1, t2.field2, t3.field3 from t1 join t1.t2 join t1.t3 where t1.id = :idUser")
List<Object> getUserProfile(@Param("idUser") String idUser);

我尝试从结果集中获取值如下:

        if (obj != null) {
        for(Object oArray : obj) {
            Object[] o= (Object[]) oArray;
..
        }

如果 t2.field2

为空,数组“o”具有以下索引:o[0]、o[2],因此一旦我遍历索引 1,就会出现异常,因为索引 1 不存在。如您所见,索引不是连续的 [0,1,2]。

解决方法是验证查询中的空值。但我想这对开发人员来说并不好,或者至少 Hibernate 不希望这样做。

Roo 1.2.4; Java 1.7;春季 3.2,休眠 4.2.2

但是,如果这是 Hibernate 中的错误,这可能是一个巨大的问题。有人可以帮助我解决这个疑问吗?

谢谢! /JR。

【问题讨论】:

    标签: hibernate spring-mvc spring-roo


    【解决方案1】:

    最好的方法是定义一个 ViewDTO 包含一个构造函数来获取所有三个选择参数

    • t1.field1
    • t2.field2
    • t3.field3

    还为所有这些字段添加 getter。

    并将查询更改为:

    select NEW mypackage.ViewDTO(t1.field1, t2.field2, t3.field3) from ...
    

    所以你会得到一个 ViewDTO 的列表而不是一个数组。这样您可以更好地处理空值。

    更多详情请关注this article

    【讨论】:

    • 感谢弗拉德,eruiz,您的支持对我帮助很大。我试图点击向上箭头以获得好的答案,但我得到了:投票需要 15 条声望消息。
    【解决方案2】:

    您不需要从 ResultSet 中获取值,Spring Data 会为您完成。

    看看http://docs.spring.io/spring-data/data-jpa/docs/current/reference/htmlsingle/#jpa.query-methods.at-query

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 2011-02-04
      • 2023-04-09
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      相关资源
      最近更新 更多