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 不支持多对多关系。有什么建议如何建模吗?

先感谢您。

4

2 回答 2

0

GAE JPA 显然确实支持无主MN 关系,但是您的模型中没有任何 MN(即 Property 不知道 Item)。您有一个集合字段,因此您将其标记为@OneToMany。由于 GAE 允许的查询很少,因此查询会更成问题。(即连接方式不多)

于 2012-12-17T05:09:50.263 回答
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 回答