受其他列表影响的JAVA JPA List

时间:2015-04-19 10:09:25

标签: java mysql hibernate jpa orm

我正在使用Hibernate和MySQL数据库。

我有一个奇怪的问题。

@XmlElement
@ElementCollection(fetch=FetchType.EAGER)
private List<String> features;

@XmlElement
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List<ExtraList> extraLists;

我使用Facade来检索数据。当我从数据库中获取对象时。功能列表有5项(我应该)。但extraLists也有5个项目。此列表应仅包含单个对象。但它包含与该功能列表中的项目一样多的该对象的副本。

如果我将功能列表更改为4个项目,则额外列表也将包含4个项目。

我尝试谷歌,但我不知道如何谷歌这个问题,并找不到任何好结果。

2 个答案:

答案 0 :(得分:0)

你应该使用像这样的查询:

select distinct e
from MyEntity e
left join fetch e.extraLists
where e.id = :id
  1. 一对多集合应使用FetchType.LAZY,因此您使用query-time fetch directive加载集合以及根实体
  2. distinct关键字告诉Hibernate删除对象引用重复项

答案 1 :(得分:0)

@JB Nizet和@beerbajay在哪里正确。使用Set修复了我的问题。不幸的是,我不能支持他们的评论