小编典典

OneToMany注释列表中的重复项

hibernate

我正在使用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与某个特定Question对象相关的所有都已正确加载。

但是现在我需要将answerscollecton 的tipe
从更改SetList。我更改了类型并再次运行了该应用程序,现在在answers…中出现了多个重复项,为什么可能呢?我知道List允许重复,但是我的数据库中没有重复的记录,那么为什么要得到这些?

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

注意 我需要更改Set为,List因为我需要保留有关答案 顺序的 信息,并且可能需要更改此顺序。


阅读 455

收藏
2020-06-20

共1个答案

小编典典

您很可能会重复,因为使用fetch = FetchType.EAGER时,Hibernate
使用外部联接来获取联接表中的数据。

尝试删除渴望获取的内容以进行确认。在这种情况下,您应该删除急切的访存,保留Set而不是List或编写JPQL查询以准确检索所需内容。

Hibernate
doc中

建议的方法是在所有静态提取定义上使用LAZY并通过JP-QL动态覆盖此选择。

2020-06-20