当前位置: 首页 > 面试题库 >

OneToMany注释列表中的重复项

谷梁弘深
2023-03-14
问题内容

我正在使用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因为我需要保留有关答案 顺序的 信息,并且可能需要更改此顺序。


问题答案:

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

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

从Hibernate
doc中

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



 类似资料:
  • 我在Hibernate(4.3.0)中遇到了一个问题,其中as单向@OneToMany返回重复项。 我的数据库结构(MySQL与InnoDB),其中作为“条目”表与“entry_address”表有1: N关系。“条目”表是主表,“entry_address”是“条目”表的子表。 下面是“entry”实体的最小代码。 以下是“entry_address”实体的最小代码: 这是Hibernate完成

  • 我是一个新的探索Spring启动和冬眠,并面临一个问题,我认为这并不是新的。然而,在所有的建议都到位的情况下,我仍然找不到一个方法来解决我目前面临的问题。 你们谁能指出我错在哪里吗? 以下是场景- 我有一个Category类,并且Category类的每个实例可以有许多子Category的实例。 我已经使用@OneTomany注释设置了关系。然而,当试图将记录保存到数据库时,我面临的是org.hib

  • 我有两个映射到OneToMany、ManyToOne的类,我得到了异常: org.hibernate.annotationException:mappedBy引用了一个未知的目标实体属性:entity_package.ticketentity.ownerEntity in entity_package.userentity.ownedTickets 公共类TicketEntity实现可序列化{ 怎

  • 本文向大家介绍Oracle 获取表注释和列注释,包括了Oracle 获取表注释和列注释的使用技巧和注意事项,需要的朋友参考一下 全部表 表的注释 列的注释 相应的还有dba_col_comments,all_col_comments,这两个比user_col_comments多了ower列 以上所述是小编给大家介绍的Oracle 获取表注释和列注释,希望对大家有所帮助,如果大家有任何疑问请给我留言

  • 我有一个数据库,它的一些表之间有关系,例如,我必须表Person和Company,它们的Id之间有一个一对多的关系,这是在Hibernate生成的表名Person_Company中构建的。当我在java中使用@onetomany和@manytoone注释时,它在它们之间建立了关系,但不是根据Person_Company表,我只使用表的Id什么是正确的注释?

  • 如果我有用@component注释标记的bean。而是不同文件夹中的两个bean。一个在com.mycompany.core.bean1中,另一个在com.mycompany.dao.bean2中。当我试图在Bean2中自动连接bean1时,就像: 我需要在bean2中导入带有bean1的包吗?还是它会自己扫描它? UPD:我知道同名的问题。但问题是完全不同的。所以请注意我的问题,如果你现在它,不