对象中带有空参数的Hql构造函数查询
Hql constructor query with null parameter in object
我正在尝试加入 2 tables 并通过构造函数查询将结果添加到新对象。并非左侧 table 的所有 ID 都在右侧 table。因此,通过外部联接,我希望从左侧 table 获得所有结果,并从右侧 table 获得所有结果,如果没有结果,则为空值。
对象似乎不能保存空值。当我尝试下面的代码时,我只得到 4 个结果,它们在另一个 table 中都有相应的值。当我从 x.x.x.PersonWithPartner 对象中删除参数 2 时,将显示所有 49 个(预期的)结果(我只修改了第二个参数,查询是相同的)
我的结论是否正确,不能将空值传递给查询构造函数?我试图将 null 作为第二个参数进行硬编码,但随后收到一条错误消息,这也让我认为 null 值不能作为参数传递。
我该如何解决这个问题,是否可以将第二个参数设为可选?因为参数二是一个对象,所以它会自动解析为空值,从而解决了我的问题。
我在 pgadmin 中重新创建了查询并得到了预期的结果。通过删除 LEFT OUTER JOIN(和对象的第二个参数)查询 returns 我期望的所有记录。
精简查询
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。
试试这个:
SELECT new x.x.x.PersonWithPartner(p, related)
FROM Person p
LEFT OUTER JOIN p.relation relation
LEFT OUTER JOIN relation.related related
我不知道这是否有效。但可能 relation.related
创建了一个隐式内部连接。
我正在尝试加入 2 tables 并通过构造函数查询将结果添加到新对象。并非左侧 table 的所有 ID 都在右侧 table。因此,通过外部联接,我希望从左侧 table 获得所有结果,并从右侧 table 获得所有结果,如果没有结果,则为空值。
对象似乎不能保存空值。当我尝试下面的代码时,我只得到 4 个结果,它们在另一个 table 中都有相应的值。当我从 x.x.x.PersonWithPartner 对象中删除参数 2 时,将显示所有 49 个(预期的)结果(我只修改了第二个参数,查询是相同的)
我的结论是否正确,不能将空值传递给查询构造函数?我试图将 null 作为第二个参数进行硬编码,但随后收到一条错误消息,这也让我认为 null 值不能作为参数传递。
我该如何解决这个问题,是否可以将第二个参数设为可选?因为参数二是一个对象,所以它会自动解析为空值,从而解决了我的问题。
我在 pgadmin 中重新创建了查询并得到了预期的结果。通过删除 LEFT OUTER JOIN(和对象的第二个参数)查询 returns 我期望的所有记录。
精简查询
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。
试试这个:
SELECT new x.x.x.PersonWithPartner(p, related)
FROM Person p
LEFT OUTER JOIN p.relation relation
LEFT OUTER JOIN relation.related related
我不知道这是否有效。但可能 relation.related
创建了一个隐式内部连接。