Значение 0 в Hibernate IndexColumn сопоставлено с базой= 1
-
24-09-2019 - |
Вопрос
Мы используем Hibernate Annotations 3.4.0GA и Hibernate Core 3.3.2.GA (также известные как текущие стабильные версии) для базы данных Oracle
У нас есть сопоставление «один ко многим» с base= 1, которое отлично работало долгое время, но на прошлой неделе мы обнаружили несколько записей в базе данных, в которых столбец индекса содержал значение 0, что вызвало всевозможные проблемы.
Итак, мой вопрос: знает ли кто-нибудь способ получить значение 0 в столбце индекса отношения «один ко многим», когда оно отображается с базой= 1? Возможно, связано с использованием дженериков или MappedSuperclass.
Обратите внимание, что код довольно сложный, потому что также задействовано наследование.
Ниже приведены соответствующие части классов:
родовое словоФактические классы наследуются от них и предоставляют конкретные классы для параметров типа. Они отображаются как Entity. Они также определяют столбцы идентификаторов и версий, а также множество других атрибутов и ссылок, но ничего не имеют отношения к имеющемуся отображению.
Решение
Я знаю, что прошло почти два года, но я наткнулся на это, когда искал решение той же проблемы.Мы используем hbm через файлы xml, поэтому я не совсем уверен, поможет ли это. В нашем случае проблема заключалась в обратном отображении.Если контроль над списком (и индексом) находился на стороне элемента списка («многие»), как в вашем случае, у нас возникла проблема.Перемещение вверх решило эту проблему.Не знаю, как это делается с аннотациями.
Еще одним источником ошибки может быть фактическая установка «элементов» в свой объект AbstractReihung.Hibernate использует прокси-объекты для отложенной загрузки свойств.Если вы устанавливаете целую новую коллекцию вместо изменения существующей, вы перезаписываете прокси-объект.