1
这里是我的代码的精简版本:JPA2:我们可以在实体中使用多个@ElementCollection吗?
@Entity
public class Item implements Serializable{
@Id
@GeneratedValue
private long id;
@ElementCollection(fetch=FetchType.EAGER ,targetClass=Cost.class)
@CollectionTable(name="ItemCost", joinColumns = {@JoinColumn(name="itemId")})
private Set<Cost> costs= new HashSet<Cost>();
@ElementCollection(fetch=FetchType.EAGER ,targetClass=ItemLocation.class)
@CollectionTable(name="ItemLocation", joinColumns = {@JoinColumn(name="itemId")})
private Set<ItemLocation> itemLocations;
}
允许在上面的代码?我有两个可嵌入类Cost和ItemLocation,与@ElementCollection一起使用。
问题: 当我试图运行一个名为查询
@NamedQuery(name = "Item.findAll", query = "SELECT i FROM Item i")
我有奇怪的行为。第二个元素集合(ItemLccation表)中的记录正在翻倍(插入到表中)。
谢谢我没有添加任何数据到成本集合尝试,我仍然有位置的问题。所以我的问题与多元素集合无关。当我试图查询该项目时,我得到重复项。对于每次查找,它都会将项目位置中的记录加倍。我不理解您对equals和hashcode的评论。 ItemLocation没有Id,因为它是Embeddable。对于我正在使用的@GeneratedId – 2012-03-02 18:06:35
添加@OrderColumn已经解决了这个问题。虽然我不明白关于equals和hashcode的建议。你能否用一个例子来说明一个没有主键的Embeddable类的含义?谢谢你的帮助。 – 2012-03-02 20:20:20