Мы используем 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 и версии, а также тонны других атрибутов и ссылок, но ничего не связаны с отображением под рукой.