【发布时间】:2019-08-22 06:53:16
【问题描述】:
我正在尝试加入 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;
}
我希望每条记录都有一个始终填充第一个参数的对象,第二个参数是连接找到的对象或 null。
【问题讨论】:
-
person 和related 之间有链接表吗?与其他人有关系吗?您查看生成的 SQL 查询了吗?
-
是的,对象之间存在 OneToMany 和 ManyToOne 关系。还没有。我还不能让它工作。我先试试看。