java - 对象中带空参数的 Hql 构造函数查询

标签 java hibernate hql

我正在尝试连接 2 个表并通过构造函数查询将结果添加到新对象。并非左表中的所有 id 都在右表中。因此,通过外连接,我希望从左表中获取所有结果,并从右表中获取结果,如果没有结果,则为空值。

看起来该对象不能保存空值。当我尝试下面的代码时,我只得到 4 个结果,所有这些结果在另一个表中都有相应的值。当我从 x.x.x.PersonWithPartner 对象中删除参数 2 时,将显示所有 49 个(预期)结果(我只修改了第二个参数,查询是相同的)

我的结论是否正确:空值不能传递给查询构造函数?我尝试将 null 作为第二个参数硬编码,但随后收到一条错误消息,这也让我认为 null 值不能作为参数传递。

我该如何解决这个问题,是否可以使第二个参数可选?因为参数二是一个对象,所以它会自动解析为空值,从而解决我的问题。

我在 pgadmin 中重新创建了查询并得到了我期望的结果。通过删除 LEFT OUTER JOIN(以及对象中的第二个参数),查询将返回我期望的所有记录。

精简查询

SELECT new  x.x.x.PersonWithPartner(p, relation.related)
FROM Person p
LEFT OUTER JOIN p.relation relation

x.x.x.PersonWithPartner 对象

@Getter
@Setter
@Entity
public class PersonWithPartner {
    private Person person;
    private Person partner;

    public NatuurlijkPersoonWithPartner(Person person, Person partner) {
        this.person = person;
        this.partner = partner;
    }

我期望每个记录都有一个对象,第一个参数始终填充,第二个参数要么是通过连接找到的对象,要么为空。

最佳答案

试试这个:

SELECT new  x.x.x.PersonWithPartner(p, related)
FROM Person p
LEFT OUTER JOIN p.relation relation
LEFT OUTER JOIN relation.related related

我不知道这是否有效。但可能 relation.lated 创建了隐式内部联接。

关于java - 对象中带空参数的 Hql 构造函数查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57603550/

相关文章:

java - 用于查找超过 3 小时的条目的 Hibernate HQL 查询

java - 如何在 camera2 API 中触发手动自动对焦?

java - regex - Java 正则表达式匹配方括号

java - 如何通过@IndexColumn 中的数字选择集合中的第 n 个元素?

java - hibernate 中的继承

java - 谁能帮我写一个更新查询

java - 为什么我需要在 @Override[inner class] 方法中将变量转换为最终数组?

java - Spring Data JPA QueryDslPredicateExecutor 找到不同的结果

java - Hibernate - 按列分组、收集到列表和限制

mysql - 如何在Mysql中单独检查日期和时间?