JAVA JPA 列表受其他列表影响
JAVA JPA List affected by other list
我正在使用 Hibernate 和 MySQL 数据库。
我有一个奇怪的问题。
@XmlElement
@ElementCollection(fetch=FetchType.EAGER)
private List<String> features;
@XmlElement
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List<ExtraList> extraLists;
我正在使用外观来检索数据。当我从数据库中获取对象时。功能列表有 5 个项目(我应该这样做)。但是 extraLists 也有 5 个项目。此列表应仅包含一个对象。但它包含与功能列表中的项目一样多的该对象的重复项。
如果我将功能列表更改为 4 个项目,extraLists 也将包含 4 个项目。
我试过google,但我不知道如何google解决这个问题,也找不到任何好的结果。
您应该使用这样的查询:
select distinct e
from MyEntity e
left join fetch e.extraLists
where e.id = :id
- 一对多集合应该使用
FetchType.LAZY
所以你使用 query-time fetch directive 来加载集合和根实体
distinct
关键字告诉 Hibernate 删除对象引用重复项
@JB Nizet 和@beerbajay 哪里是对的。使用 Set 可以解决我的问题。不幸的是我不能给他们的评论投票
我正在使用 Hibernate 和 MySQL 数据库。
我有一个奇怪的问题。
@XmlElement
@ElementCollection(fetch=FetchType.EAGER)
private List<String> features;
@XmlElement
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List<ExtraList> extraLists;
我正在使用外观来检索数据。当我从数据库中获取对象时。功能列表有 5 个项目(我应该这样做)。但是 extraLists 也有 5 个项目。此列表应仅包含一个对象。但它包含与功能列表中的项目一样多的该对象的重复项。
如果我将功能列表更改为 4 个项目,extraLists 也将包含 4 个项目。
我试过google,但我不知道如何google解决这个问题,也找不到任何好的结果。
您应该使用这样的查询:
select distinct e
from MyEntity e
left join fetch e.extraLists
where e.id = :id
- 一对多集合应该使用
FetchType.LAZY
所以你使用 query-time fetch directive 来加载集合和根实体 distinct
关键字告诉 Hibernate 删除对象引用重复项
@JB Nizet 和@beerbajay 哪里是对的。使用 Set 可以解决我的问题。不幸的是我不能给他们的评论投票