gpt4 book ai didi

JPA 左外连接 : is empty or condition

转载 作者:行者123 更新时间:2023-12-04 18:12:39 25 4
gpt4 key购买 nike

我正在使用 jpa 查询,我可以找到合适的解决方案。我希望你能帮助我。我将开始描述我的模型。我有一个属于公司的资源。公司拥有多家分公司。该资源关联了几个资源所有权配置。资源所有权描述了哪些分支可以使用资源以及此配置有效的时间段。但是,如果没有指定分支机构,则该资源可以被公司的所有分支机构使用。

这是模型。省略了 getter 和 setter

@Entity
public class Resource extends ActivableAbstractModel{

/**
* the serial version uid
*/
private static final long serialVersionUID = -8568230011058859716L;

public Resource() {
this.ownerShipConfigurations = new ArrayList<>();
}

@Column(length=30)
private String name;

private String description;

@ManyToOne(cascade = {}, fetch = FetchType.LAZY, targetEntity=Company.class)
@ForeignKey(name = "FK_company_resource")
@JoinColumn(nullable = false)
private Company company;



@OneToMany(cascade={CascadeType.ALL}, orphanRemoval=true, mappedBy="resource")
private List<ResourceOwnerShipConfiguration> ownerShipConfigurations;

}

实体
@Entity
public class ResourceOwnerShipConfiguration extends AbstractModel{

/**
* the serial version uid
*/
private static final long serialVersionUID = -4560593105136625002L;

@Embedded
private Period period;

@ManyToOne(targetEntity=Company.class)
private Company company;

@ManyToMany(targetEntity=Branch.class)
private List<Branch> branches;

@ManyToOne
private Resource resource;
}

Branch Model 和 Company Model 的重要之处在于它们都有一个 ID。

这是我的查询:
@Query("select R from Resource R join R.ownerShipConfigurations oc join oc.branches b  where R.active = true and R.company.id = :companyId and (oc.branches IS EMPTY or  b.id = :branchId)")

我想做的事?我想要属于公司的所有资源(使用 companyId)并且可以由特定分支使用(使用 branchId)。但如果资源没有分支列表(在 ResourceOwnerShipConfiguration 中定义),则必须返回。

希望它很清楚。

使用该查询,我无法检索没有分支列表的资源。只是与特定分支相关联的那些。

提前致谢。

最佳答案

您需要使用左连接,

select R from Resource R join R.ownerShipConfigurations oc left join oc.branches b  where R.active = true and R.company.id = :companyId and (b.id is null or  b.id = :branchId)

看,
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#LEFT_JOIN

关于JPA 左外连接 : is empty or condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10289012/

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