当前位置: 首页 > 知识库问答 >
问题:

冬眠和奇怪的独身行为

宦子琪
2023-03-14

我目前使用的是spring boot starter数据jpa:2.7.0,它使用的是hibernate:5.6.9。

我在链接多个实体时有一种奇怪的行为。

我得到了三个实体,其中E1包含E2的一个多域列表,E2也包含E3的一个多域列表:

    @Entity
    public class E1 {
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      @Column(name = "id", nullable = false, updatable = false)
      UUID id;
    
      @OneToMany(mappedBy = "e1", fetch = FetchType.EAGER)
      List<E2> e2;
    }
    @Entity
    public class E2 {
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      @Column(name = "id", nullable = false, updatable = false)
      UUID id;

      @ManyToOne
      E1 e1;
    
      @OneToMany(mappedBy = "e2", fetch = FetchType.EAGER)
      List<E3> e3;
    }
    @Entity
    public class E3 {
      @Id
      @GeneratedValue(strategy = GenerationType.AUTO)
      @Column(name = "id", nullable = false, updatable = false)
      UUID id;

      @ManyToOne
      E2 e2;
    }

对于每个实体,我定义了简单的存储库,例如:

@Repository
public interface E1Repository extends JpaRepository<E1, UUID> {}

此外,我根据存储库类来访问日期。存储很好,工作正常。

当存储一个E1和一个E2的列表时,具有两个E3的列表会导致我的数据库表中的正确数据。

使用e1Repository.findAll()检索数据很好,并返回预期的Entitye1,其中一个e2和两个e3

但是,当使用e1Repository.findById(id)检索数据时,它返回一个e1实体,其中包含两个e2,每个实体包含两个e3。这两个e2具有相同的ID。

更改列表时

有人对这种行为有什么解释吗?我做错了什么,或者我可以改变什么来获得正确的数据?

非常感谢!

共有1个答案

闾丘霖
2023-03-14

我认为您可以使用@JoinCol列而不是mappdBy。

 类似资料:
  • 另一种方法是使用Crieteria关联,但关联只能与和一起工作! 请在这里帮帮我。

  • 我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方

  • 运行Spring Boot应用程序时,我遇到了一些奇怪的问题。它已配置为使用Log4J2作为其记录器(Logback记录器已被禁用)。 log4j2。xml: 主要问题 我在log4j2中有一些变量替换。xml文件,以允许变化,特别是日志文件名。当我运行应用程序时,日志文件被创建在正确的目录中,并且看起来确实有实际的日志内容。问题是它们的名字不正确。例如,而不是,文件名为${sys:service

  • 我有一些问题要执行。 我需要的: 发布来自用户的消息 将其广播给其他用户 将消息发送给将在下次连接时使用该消息的脱机用户 我实际上: 在index.html页上,我连接到套接字服务器 我有一个发送消息的按钮 我在索引页上打开两个不同的浏览器,我的用户都已连接起来 如果我向服务器发送消息,服务器就会将消息发送给其他用户 如果我向服务器发送第二条消息,它就会将该消息发送给发送该消息的用户。 它在切换,

  • 问题内容: 我在GregorianCalendar类中遇到一个奇怪的行为,我想知道我是否真的做得不好。 仅当初始化日期的月份的实际Maximum大于我将日历设置为的月份时,才追加此值。 这是示例代码: 我知道问题是由于日历初始化日期是31天(可能是5月),与设置为2月(28天)的月份混淆了。修复很容易(只需在设置年和月之前将day_of_month设置为1),但是我想知道这确实是想要的行为。有什么