【问题标题】:Persistent set is empty with HibernateHibernate 的持久集为空
【发布时间】:2017-04-05 20:30:19
【问题描述】:

我有一个包含几个 Set 类型字段的实体。当我从数据库中检索实体时,即使数据库中的关联正确,该集合也始终为空。

@Valid
@NotNull
@OneToMany(fetch = FetchType.EAGER)
private Set<Location> locations;

我尝试启用急切获取以强制休眠在检索实体时加载关联,但它始终为空。具有非集合类型的其他字段已正确填充。

我以前从未在 hibernate 中看到过这种情况,我做错了什么吗?

谢谢

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    不是 100% 而是 99% 确定您需要将 cascade 添加到您的 @OneToMany - 默认级联根本没有级联,这意味着如果您持久化您的实体,Location 集合将不会被持久化..

    试试这个:

    @Valid
    @NotNull
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<Location> locations;
    

    换句话说,您的问题不在于未获取集合,而是一开始就没有将其持久化(您在 Location 和连接表中看到任何内容吗?)

    编辑 - 我现在看到您编写的关联是正确的,所以您是否单独保留您的 Location 对象?

    【讨论】:

      【解决方案2】:

      我认为你错过了 mappedBy 属性。

      @OneToMany(fetch = FetchType.EAGER, mappedBy="fieldname")
      

      其中 fieldname 应该是 Location 实体中引用字段的名称

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2010-11-24
        • 1970-01-01
        • 2015-02-13
        • 1970-01-01
        • 2020-03-30
        • 1970-01-01
        相关资源
        最近更新 更多