这是我的代码的精简版本:
@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表)中的记录被加倍(插入到表中)。
JPA 2.0允许使用您的代码。使用ElementCollection对多个集合进行注释是完全合法的。而且,这很可能和你们的问题并没有任何关系。顺便说一句,要弄清楚这真的是你的问题吗?你有没有在没有成本收集的情况下尝试过你的代码?
这个集合中第一次出现重复的确切时间点是什么?如果ItemLocation没有定义等于&hashcode,重复项可以很容易地作为自己添加项目的结果。
可能您正面临这个问题:CollectionTable中的主键和将类型更改为列表并添加@OrderColumn将有所帮助。