gpt4 book ai didi

java - JPA CriteriaBuilder 加入额外的 ON 子句参数(谓词)

转载 作者:行者123 更新时间:2023-11-29 03:37:36 24 4
gpt4 key购买 nike

如何加入额外的ON子句参数?我有一个 SQL:

select * from Address address left outer join  AddressLine line 
on line.id = address.lineId AND line.type = 'MA'
where address.id = 1;

我有代码:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<AddressResult> query = cb.createQuery(AddressResult.class);
Root<Address> r = query.from(Address.class);
Join<Address, AddressLineMA >linesMA= r.join(Address_.linesMajor, JoinType.LEFT);

从数据库中获取数据。此查询未按预期工作我得到这样的 SQL:

select * from Address address left outer join  AddressLine line 
on line.id = address.lineId
where address.id = 1;

AND line.type = 'MA' 缺失。有人知道如何解决这个问题吗?

我的 AddressLineMA.class 如下所示:

@Entity
@DiscriminatorValue(value = "MA")
public class AddressLineMA extends AddressLine {

}
@Entity
@Table(name = "AddressLine")
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING)
public abstract class AddressLine {
private Long id;
private String type;
private String line;
}

最佳答案

默认情况下,JPA 查询始终返回所有子类。因此,如果您只需要 AddressLineMA 的实例,则必须将查询和关系更改为位于 AddressLineMA 上,而不是继承根类 AddressLine。

如果你想排除 AddressLineMA 的其他子类,那么你可以使用添加到 JPA 2.0 的 TYPE 运算符:

   query.where(cb.equal(linesMA.type(), package.AddressLineMA.class));

不幸的是,只有尚未发布的 JPA 2.1 规范才支持将其添加到 ON 子句中:

   linesMA.on(cb.equal(linesMA.type(), package.AddressLineMA.class));

关于java - JPA CriteriaBuilder 加入额外的 ON 子句参数(谓词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14691734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com