Hibernate:一对多关系中集合的索引列为空

Hibernate:一对多关系中集合的索引列为空,hibernate,list,indexing,one-to-many,Hibernate,List,Indexing,One To Many,我试图在Hibernate中将一对多/多对一关系映射为一系列子实体。对其他关系上的集合执行相同的操作可以找到,但我需要一个具有子实体顺序的列表 到目前为止,我所做的是: @Entity @Table(name="event") public class Event { @OneToMany(mappedBy="event", fetch=FetchType.EAGER) private List<Message> messages; //Message entiti

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

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

@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
}
在此我可以插入一条消息,它将被添加到数据库(postgres)。但问题在于将消息作为列表获取:当只添加了一条消息并且在数据库中可见时,我得到了同一条消息的两个结果

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

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


谢谢大家!

我知道这是一篇老文章,但我今天遇到了这个问题

我通过在列表父级的setter方法上添加以下注释来解决此问题:

@OneToMany()
@OrderColumn( name = "LIST_ORDER" )
@Cascade( { CascadeType.SAVE_UPDATE, CascadeType.DELETE } )
@ForeignKey( name = "FK_..." )
我收到了异常,因为我的OneToMany注释中有一个“mappedBy”属性


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

我对旧版本的hibernate(3.5.6)也有同样的问题,并找到了一个很好的非侵入性解决方法:尝试将
列表
更改为
对象,并使用
哈希集
而不是
数组列表


祝你好运

我在使用@OrderColumn时也遇到了同样的问题,正如@dan torrey和@peter Wipperman所提到的,但是在我的例子中,这个问题其实很小。当连接实体时,我忘记了一侧。在上面的例子中,我只做了message.setEvent(event),但没有做event.getMessages().add(message)。由于Hibernate的工作方式,它在没有警告的情况下被持久化到数据库中,直到后来我添加了@OrderColumn之后,它才开始失败


我知道最初的问题不包括@OrderColumn,但是上面的错误消息应该只在Hibernate实际使用索引列时出现。。(可能OP以其他方式配置了此功能。)

我也有同样的问题,并且也像您一样使用了“@OrderColumn”。然而,线程开启器没有。我同意的是,如果您有@OrderColumn,请仔细检查它是否为null。在我的例子中,数据库预先填充了包含排序列doh的null值的值
@OneToMany()
@OrderColumn( name = "LIST_ORDER" )
@Cascade( { CascadeType.SAVE_UPDATE, CascadeType.DELETE } )
@ForeignKey( name = "FK_..." )