Допустим, у нас есть отношение @OneToMany для сущностей A и B. У каждого 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. Для этого я добавил @OrderColumn, как показано ниже.
@OneToMany
@OrderColumn(name="B_ORDER")
private List<B> items;
Он отлично работает, и в таблице B теперь есть столбец B_ORDER со значениями порядка.
Теперь производственную базу данных необходимо обновить. В таблицу B добавлен новый столбец B_ORDER. Однако для существующих строк этот столбец не имеет значения (null). Когда вы пытаетесь получить список B для уже существующей записи, я получаю следующее исключение:
org.hibernate.HibernateException: null index column for collection
Это нормально иметь список B в любом порядке для старых записей. @OrderColumn имеет свойство nullable, которое по умолчанию равно true. Но это не помогает.
Есть ли способ JPA для этого или я должен сам заполнить эти нулевые значения в db?
Использование JPA 2.1 с Hibernate 4.3.7.