JPA2:我们可以在实体中使用多个@ElementCollection吗?

时间:2012-03-01 23:18:00

标签: jpa-2.0 embeddable

以下是我的代码的精简版本:

@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")

我的行为很奇怪。第二个elementcollection(ItemLccation表)中的记录加倍(插入表中)。

1 个答案:

答案 0 :(得分:0)

它涉及到JPA 2.0,您的代码是允许的。拥有多个使用ElementCollection注释的集合是完全合法的。此外,它很可能与您遇到的问题无关。顺便说一句,要找出真的是你的问题,你是否尝试过没有成本收集的代码?

在这个集合中,第一次出现完全重复的情况?如果ItemLocation没有定义equals&amp; hashcode,那么重复项很容易就会自动添加项目。

您可能遇到此问题:Primary keys in CollectionTable并列出要列出的类型并添加@OrderColumn会有所帮助。