1

休止状態の JPA と GAE JPA の両方で動作するようにオブジェクトをモデル化しようとしています。Itemプロパティのリストを持つクラスがあります。特定のプロパティを持つすべてのアイテムを見つける必要があります。例えば:

@Entity
public class Item {
    @Id
    public Long id;

    @ManyToMany(name="properties")
    public List<Property> props; 
}

@Entity
public class Property {
    @Id
    public Long id;
    public String value;
}

私のクエリは次のようになります

select i from Item i join i.props p where p.id=1 and p.id=3 and p.id=10 

1、3、および 10 は、探しているプロパティの ID です。たとえば、本のアイテムを持っていて、Property(1, "category:book") Property(3, "text:anatomy"), Property(10, "text:brain") というプロパティを探すことができます。プロパティはアイテムのタグと考えることができます。

JAE JPA は ManyToMany 関係をサポートしていません。これをモデル化する方法について何か提案はありますか?

前もって感謝します。

4

2 に答える 2

0

これが私が最終的に得た解決策です:

@Entity
public class Item implements Serializable {
    @Id
    public Long id;

    @Unowned
    @OneToMany(cascade = CascadeType.ALL)
    @Column(name = "properties")
    public Set<Property> properties = new HashSet<Property>();

    @ElementCollection
    public Set<Long> propIds = new HashSet<Long>();
}

@Entity
public class Property implements Serializable {
    @Id
    public Long id;
    public String value;
}

クエリは次のようになります。

select i from Item i where 1 member of i.propIds and 3 member of i.propIds

これにより、必要なすべてのアイテムが返されます。次に、 からプロパティにアクセスできますitem.properties

于 2012-12-23T08:05:38.087 に答える
0

GAE JPA は明らかに所有されていないMN 関係をサポートしていますが、モデルには MN はありません (つまり、Property は Item を知りません)。コレクション フィールドがあるので、@OneToMany としてマークします。クエリで GAE が許容する量が少ないため、クエリはより問題になります。(つまり、結合の方法はあまりありません)

于 2012-12-17T05:09:50.263 に答える