Hibernate不支持@OneToMany(mappedBy =“ …”)和@OrderColumn的组合。此JIRA问题跟踪使用此无效组合时引发更明显错误消息的请求:http ://opensource.atlassian.com/projects/hibernate/browse/HHH-5390
我认为主要由于它是一种奇怪的关系模式而不受支持。上面的注释指示关系的“一个”侧确定如何将关系刷新到数据库,但是通过检查列表,顺序/位置仅在“许多”侧可用。“多”方拥有该关系更有意义,因为该方既了解元素的隶属关系又了解元素的顺序。
Hibernate Annotations文档详细描述了这种情况:
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity- hibspec-collection-extratype- in??dexbidir
解决方法是删除“ mappedBy”属性,这将导致关联使用默认的联接表策略而不是目标表上的列。您可以使用@JoinTable批注指定连接表的名称。
此更改的最终结果是,关系的“许多”端现在确定了如何保持关系。您的Java代码需要确保List正确更新,因为Hibernate现在在刷新实体时将忽略“一侧”。
如果您仍然想用Java访问“一侧”,请使用
@ManyToOne
@JoinColumn(name="...", insertable=false, updatable=false, nullable=false)