【问题标题】:JAVA JPA List affected by other list受其他列表影响的 JAVA JPA 列表
【发布时间】:2015-06-26 00:43:57
【问题描述】:

我正在使用 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 项,则额外列表也将包含 4 项。

我试图用谷歌搜索,但我不知道如何用谷歌搜索这个问题,也找不到任何好的结果。

【问题讨论】:

  • 对这些集合中的至少一个使用 Set 而不是 List。
  • 我记得,这是FetchType.EAGER 结合List 而不是Set 的问题;使用FetchType.LAZYSet

标签: java mysql hibernate jpa orm


【解决方案1】:

你应该使用这样的查询:

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 删除重复的对象引用

【讨论】:

  • 数据库包含单个项目。检索它们时问题出在 jpa 上
【解决方案2】:

@JB Nizet 和@beerbajay 在正确的地方。使用 Set 解决了我的问题。不幸的是,我不能赞成他们的评论

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2022-08-02
    • 1970-01-01
    • 2019-09-28
    • 2021-02-19
    • 1970-01-01
    相关资源
    最近更新 更多