3

私のクラスの 1 つである Location には、次のようなものがあります。

private List<Magician> magicians;

...

@OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="location_id")
public List<Magician> getMagicians() {
    return magicians;
} 

public void setMagicians(List<Magician> magicians) {
    this.magicians = magicians;
}

マジシャンには変数があります

private Integer id;
private Integer location_id;
private Boolean active;

ここで、getter アノテーションを変更して、active が true であるマジシャンのみを取得したいと考えています。

どうすればこれを達成できますか?

ご清聴ありがとうございました。

4

3 に答える 3

2

まず第一に、Magician は location_id フィールドを持つべきではありません。タイプ Location のフィールドが必要です。これにより、2 つのエンティティ間に双方向の関連付けが作成されます。

@OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "location")
public List<Magician> getMagicians() {
    return magicians;
} 

...

@ManyToOne
@JoinColumn(name = "location_id")
public Location getLocation() {
    return this.location;
}

次に、あなたの質問に答えるために、エンティティの状態と関連付けは、特定のユースケースまたはクエリを実装するために使用されません。データベースに含まれるものをモデル化するために使用されています。特定の場所のアクティブなマジシャンを取得するには、単純にクエリを使用する必要があります。

select m from Magician m where m.active = true and m.location = :location
于 2013-05-02T09:04:29.397 に答える