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表)中的记录被加倍(插入到表中)。

JPA 2.0允许使用您的代码。使用ElementCollection对多个集合进行注释是完全合法的。而且,这很可能和你们的问题并没有任何关系。顺便说一句,要弄清楚这真的是你的问题吗?你有没有在没有成本收集的情况下尝试过你的代码?

这个集合中第一次出现重复的确切时间点是什么?如果ItemLocation没有定义等于&hashcode,重复项可以很容易地作为自己添加项目的结果。

可能您正面临这个问题:CollectionTable中的主键和将类型更改为列表并添加@OrderColumn将有所帮助。

相关内容

  • 没有找到相关文章

最新更新