【问题标题】:Hibernate: null index column for collection in one-to-many relationHibernate:一对多关系中的集合的空索引列
【发布时间】:2013-07-02 07:32:35
【问题描述】:

我正在尝试将 Hibernate 中的一对多/多对一关系与子实体列表映射。对其他关系的 Set 执行相同的操作可以找到,但我需要一个具有子实体顺序的列表。

到目前为止,我所做的是:

@Entity
@Table(name="event")
public class Event {
    @OneToMany(mappedBy="event", fetch=FetchType.EAGER) 
    private List<Message> messages; //Message entitiy is the child
//getters+setters+and some other stuff like id
}

这里是多对一的一面:

@Entity
@Table(name="message")
public class Message{
    @ManyToOne
    @JoinColumn(name="eventid")
    private Event event;
//getters+setters+and some other stuff like id
}

在此我可以插入一条消息,它将被添加到数据库(postgres)中。但是问题在于将消息作为列表获取:当仅添加一个并且在数据库中可见时,我得到同一消息的 2 个结果!

当然,我做了一些研究,发现列表需要索引。但我没有尝试过,没有成功。我得到的只是一个例外:“集合的空索引列......”。我在这里和通过谷歌找到的解决方案似乎都不起作用,而且有这么多“解决方案”,我真的不知道其中哪些甚至应该起作用!

有人知道如何实现这种关系吗?如果有任何建议,我将不胜感激!

谢谢!

【问题讨论】:

    标签: hibernate list indexing one-to-many


    【解决方案1】:

    我在使用旧版本的 hibernate (3.5.6) 时遇到了同样的问题,并找到了一种好的非侵入性解决方法:尝试将您的 List&lt;Message&gt; 更改为 Set&lt;Message&gt; 对象并使用 HashSet 而不是 ArrayList .

    祝你好运!

    【讨论】:

      【解决方案2】:

      我在使用@dan-torrey 和@peter-wippermann 提到的@OrderColumn 时也遇到了同样的问题,但在我的情况下,问题真的很微不足道。连接实体时,我忘记了一侧。例如。在上面的例子中,我只做了 message.setEvent(event) 而不是 event.getMessages().add(message)。由于 Hibernate 的工作原理,它会在没有警告的情况下持久保存到数据库中,直到我稍后添加 @OrderColumn 时它才开始失败。

      我知道最初的问题不包括@OrderColumn,但是只有当 Hibernate 实际使用索引列时才会出现上述错误消息..(也许 OP 以其他方式配置了这个..)

      【讨论】:

        【解决方案3】:

        我知道这是一个旧帖子,但我今天遇到了这个问题。

        我通过在列表父级的 setter 方法上添加这些注释来解决它:

        @OneToMany()
        @OrderColumn( name = "LIST_ORDER" )
        @Cascade( { CascadeType.SAVE_UPDATE, CascadeType.DELETE } )
        @ForeignKey( name = "FK_..." )
        

        我收到了异常,因为我的 OneToMany 注释中有一个“mappedBy”属性。

        如果您还没有解决这个问题,也许这会有所帮助。

        【讨论】:

        • 我遇到了同样的问题,也像你一样使用了“@OrderColumn”。但是,开线器没有。我可以同意的是,如果您有 @OrderColumn,请仔细检查它是否为空。在我的情况下,数据库预先填充了包含该排序列 doh 的空值的值
        猜你喜欢
        • 2020-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-30
        • 1970-01-01
        • 1970-01-01
        • 2019-06-22
        • 1970-01-01
        相关资源
        最近更新 更多