【发布时间】:2016-09-22 19:02:08
【问题描述】:
假设我们对实体 A 和 B 有一个 @OneToMany 关系。每个 A 可以有多个 B。
@Entity
public class A{
@Id
private long id;
...
@OneToMany(mappedBy="ref")
private List<B> items;
...
}
@Entity
public class B{
@Id
private long id;
@ManyToOne
@JoinColumn(name = "A_ID")
private A ref;
}
这个应用程序已经生产了一段时间,保存到数据库中的 B 的顺序直到现在才相关。
但是,现在需要 B 的确切顺序。为此,我添加了如下所示的@OrderColumn。
@OneToMany
@OrderColumn(name="B_ORDER")
private List<B> items;
它工作正常,B 表现在有带有订单值的 B_ORDER 列。
现在需要更新生产数据库。新列 B_ORDER 已添加到表 B。但是,对于现有行,此列没有值 (null)。当您尝试检索现有记录的 B 列表时,出现以下异常:
org.hibernate.HibernateException: null index column for collection
对于旧记录,可以按任意顺序列出 B。 @OrderColumn 具有属性“可为空”,默认情况下为 true。但这无济于事。
是否有 JPA 方式来解决这个问题,还是我必须自己在 db 中填充这些空值?
将 JPA 2.1 与 Hibernate 4.3.7 结合使用。
【问题讨论】:
-
您是否找到了比上面提到的更好的解决方法。理想情况下,它应该按 id 或其他东西对其进行排序,或者自己给出随机列表。
-
我无法尝试下面答案中给出的解决方案,因为它已经在 4 个月后到达:) (没有抱怨,仍然非常感谢)。我们刚刚使用自定义 sql 脚本填充了这些空值。您是否尝试过以下解决方案?如果是这样,请在这里写下您的经历。
标签: hibernate jpa jpa-2.0 jpa-2.1