Hibernate:以一对多关系收集的null索引列

时间:2013-07-02 07:32:35

标签: hibernate list indexing one-to-many

我正在尝试使用子实体列表映射Hibernate中的一对多/多对一关系。对其他关系的Set执行相同的工作查找,但我需要一个包含子实体顺序的List。

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

@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
}

这是ManyToOne方面:

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

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

当然,我做了一些研究,发现List上需要一个索引。但是我没有尝试过任何事情。我得到的只是一个例外:“收集的空索引列......”。我在这里和通过谷歌找到的所有解决方案似乎都没有,并且有很多“解决方案”,我真的不知道哪些甚至应该有效!

有没有人知道如何实现这种关系?我会很高兴任何建议!

谢谢!

3 个答案:

答案 0 :(得分:3)

我对旧版本的hibernate(3.5.6)存在同样的问题并找到一个好的非侵入性解决方法:尝试将List<Message>更改为Set<Message>对象并使用{{1}而不是HashSet

祝你好运!

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分:0)

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

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