Значение 0 в Hibernate IndexColumn сопоставляется с base = 1 - PullRequest
5 голосов
/ 03 марта 2010

Мы используем Hibernate Annotations 3.4.0GA и Hibernate Core 3.3.2.GA (также известные как текущие стабильные версии) для базы данных Oracle

У нас есть отображение «один ко многим» с base =1, которая работала хорошо в течение долгого времени, но на прошлой неделе мы нашли несколько записей в базе данных, где столбец индекса содержал значение 0, которое вызывало всевозможные проблемы.

Поэтому мой вопрос: кто-нибудь знаетспособ получить значение 0 в столбце индекса отношения один ко многим, когда оно отображается с основанием = 1?Возможно, связано с использованием дженериков или MappedSuperclass.

Обратите внимание, что код довольно сложный, поскольку наследование также задействовано.

Ниже приведены соответствующие части классов:

// SuperClass of the One side
@MappedSuperclass
public abstract class AbstractReihung<Tp, Tw, Te extends AbstractReihungElement<Tp, Tw>>
{
  @OneToMany(cascade = CascadeType.ALL)
  @Cascade(
  {
      org.hibernate.annotations.CascadeType.ALL,
      org.hibernate.annotations.CascadeType.DELETE_ORPHAN
  })
  @JoinColumn(name = "parent_id", nullable = false)
  @IndexColumn(name = "position", base = 1, nullable = false)
  private List<Te> elements = new ArrayList<Te>();
}

// Super Class of the Many side
@MappedSuperclass
public abstract class AbstractReihungElement<Tp, Tw> extends AbstractDbObject
{
  @ManyToOne
  @JoinColumn(name = "parent_id", insertable = false, updatable = false, nullable = false)
  private Tp parent;

  @Column(name = "position", insertable = false, updatable = false, nullable = false)
  private int position;
}

Фактические классы наследуются от них и предоставляют конкретные классы для параметров типа.Они сопоставлены как сущность.Они также указывают столбцы id и версии, а также тонны других атрибутов и ссылок, но ничего не связаны с отображением под рукой.

1 Ответ

2 голосов
/ 19 января 2012

Я знаю, что прошло почти два года, но я наткнулся на это, когда искал решение для той же проблемы. Мы используем hbm через файлы XML, поэтому я не совсем уверен, поможет ли это. В нашем случае проблема заключалась в обратном отображении. Если контроль над списком (и индексом) был на стороне элемента списка («многие»), как в вашем случае, у нас была проблема. Перемещение это решило это. Не знаю, как это делается с аннотациями.

Другим источником ошибки может быть, если вы на самом деле устанавливаете «элементы» в своем объекте AbstractReihung. Hibernate использует прокси-объекты для ленивых загруженных свойств. Если вы устанавливаете целую новую коллекцию вместо изменения существующей, вы перезаписываете прокси-объект.

...