1

这是我的代码的精简版:

@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;

}

上面的代码是否允许?我有两个与@ElementCollection 一起使用的可嵌入类Cost 和ItemLocation。

问题:当我尝试运行命名查询时

@NamedQuery(name = "Item.findAll", query = "SELECT i FROM Item i")

我有奇怪的行为。第二个元素集合(ItemLccation 表)中的记录加倍(插入到表中)。

4

1 回答 1

0

对于 JPA 2.0,您的代码是允许的。拥有多个使用 ElementCollection 注释的集合是完全合法的。此外,它很可能与您遇到的问题没有任何关系。顺便说一句,要找出这真的是您的问题,您是否尝试过您的代码而不收取费用?

该集合中的哪一点恰好重复第一次出现?如果 ItemLocation 没有定义 equals&hashcode,则很容易因为自己添加项目而出现重复。

可能您正面临这个问题:CollectionTable 中的主键和机会类型列出并添加 @OrderColumn 会有所帮助。

于 2012-03-02T06:29:20.870 回答