0

タグのリストを持つ 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();
    }

}
4

1 に答える 1

0

タグで関係の反対側を宣言する必要があります。また、リレーションシップの「マスター」を定義するために、Proce @ManyToMany で mappingby を使用する必要があります。

ここで例を参照してください

于 2012-08-04T06:31:50.383 に答える