gpt4 book ai didi

java - OneToMany 注释列表中的重复项

转载 作者:行者123 更新时间:2023-12-01 14:07:33 25 4
gpt4 key购买 nike

我正在使用 JPA 2 + Hibernate 4.2.6 处理 Java 项目,但出现了奇怪的行为。

在我的模型中,我有两个相关的实体:QuestionAnswer

@Entity
public class Question {
// ...

@OneToMany(mappedBy = "question", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Answer> answers;

// ...
}


@Entity
public class Answer {
// ...

@ManyToOne(optional = false)
@JoinColumn(name = "question_id", nullable = false)
private Question question;

// ...
}

这非常有效:所有 Answer s 与某个相关 Question正确加载。

但现在我需要改变 answers 的提示 Collection 来自 SetList .我更改了类型并再次运行了应用程序,现在我在 answers 中得到了几个重复项...
为什么有可能?我知道 List允许重复,但我的数据库中没有重复的记录,为什么我会得到这些?

我在先前版本的 Hibernate 中读到了一些类似的错误,但我希望它们在上一版本中得到解决……我错了吗?

注意 我要换 Set进入 List因为我需要保留有关 的信息订购 以获得答案,并可能更改此顺序。

最佳答案

您很可能会得到重复项,因为在使用 fetch=FetchType.EAGER 时,Hibernate uses an outer join获取连接表中的数据。

尝试删除急切获取以确认。如果是这种情况,您应该删除预先获取,保留 Set 而不是 List,或者编写 JPQL 查询来准确检索您需要的内容。

来自 Hibernate doc :

The recommanded approach is to use LAZY on all static fetching definitions and override this choice dynamically through JP-QL.

关于java - OneToMany 注释列表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20749806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com