以下是我的代码的剥离版本:

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

}
.

是上面允许的代码吗?我有两个嵌入的类成本和itemlocation,我正在使用@ElementCollection。

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

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

我有奇怪的行为。第二个ElementCollection(ItemLcdation表)中的记录逐渐加倍(插入到表中)。

有帮助吗?

解决方案

What it comes to JPA 2.0, your code is allowed. It is perfectly legal to have more than one collections that are annotated with ElementCollection. Also, it most likely does not have anything to do with problem you have. By the way, to find out is that really your problem, had you tried your code without costs collection?

In which point exactly duplicates in this collection occur first time? If ItemLocation does not define equals&hashcode, duplicates can easily come as result of adding items by yourself.

Possibly you are facing this problem: Primary keys in CollectionTable and chancing type to list and adding @OrderColumn will help.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top