タグのリストを持つ Tag オブジェクトと Price オブジェクトがあります。指定された 1 つのタグで Price を見つけることができますが、次のような特定のタグのリストで Price を見つけるためのクエリの書き方がわかりません: find price where price.tags=blue,red,green. 結果には、青、赤、緑という名前のすべてのタグが含まれている必要があります。
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Tag extends Model implements Comparable<Tag>{
public String name;
public Tag(){
}
public Tag(String name) {
this.name = name;
}
public static Tag findOrCreateByName(String name) {
Tag tag = Tag.find("byName", name).first();
if(tag == null) {
tag = new Tag(name);
}
return tag;
}
@Override
public int compareTo(Tag otherTag) {
return name.compareTo(otherTag.name);
}
}
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Price extends Model{
@Min(0.0)
public float price;
@ManyToMany
public List<Tag> tags;
public Price() {
this.tags = new ArrayList<Tag>();
}
public Price(int price) {
this.price = price;
this.tags = new ArrayList<Tag>();
}
public Price tagItWith(String name) {
tags.add(Tag.findOrCreateByName(name));
return this;
}
public static List<Price> findTaggedWith(String tag) {
return Price.find(
"select distinct p from Price p join p.tags as t where t.name = ?", tag
).fetch();
}
}