私はjpaクエリで作業しており、私は適切な解決策を見つけることができます。あなたが私を助けることを願っています。私は自分のモデルについて説明し始めます。私は会社に所属するリソースを持っています。同社には多くの支店があります。リソースは、2つのリソース所有権設定に関連付けられています。リソースの所有権は、どのブランチがリソースを使用できるか、およびこの構成が有効である期間を記述します。しかし、ブランチが表示されない場合、そのリソースは会社のすべての支店で使用できます。JPA左外部結合:空または条件
ここにモデルです。ゲッターとセッターは
@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 パブリッククラスResourceOwnerShipConfigurationは支店のモデルと当社のモデルに関する重要なの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;
}
を拡張し、省略されている両方の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で定義された)ブランチのリストがない場合は、返さなければなりません。
希望です。
このクエリを使用すると、リストを持たないリソースを取得できません。特定のブランチが関連付けられているものだけです。
ありがとうございます。