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