У меня есть довольно простая структура иерархии классов, которая указана ниже, каждый подкласс имеет тип перечисления @DiscriminatorValue, который работает очень хорошо.
Абстрактный класс:
AbstractNode (абстрактный класс, сопоставленный с таблицей Node)
Подклассы классов:
FieldNode (простой класс также сопоставляется с таблицей Node, но с другим значением @DiscriminatorValue)
SynonymNode (класс задачи, этот класс также отображается в таблицу Node с другим значением @DiscriminatorValue)
, но ТАКЖЕ имеет атрибут @SecondaryTable и имеет дополнительные столбцы, такие как deleteDate, creationDate и т. Д., Каждый из которых отображается на coumns в таблице, определенной в атрибуте @SecondaryTable.
Проблема возникает, когда я делаю простой запрос гибернации для этой таблицы узлов
Я получаю сообщения об ошибках типа:
org.hibernate.exception.GenericJDBCException: не удалось выполнить запрос
...
трассировки стека
...
Вызвано: java.sql.SQLException: Неверное имя столбца
и в своих логах я вижу:
Hibernate:
Выбрать
*
от
vocab_node
где
ниже (имя) как '%' || ? || '%'
INFO [NullableType.java:132]: не удалось прочитать значение столбца из набора результатов: DELETED_DATE; Неверное имя столбца
Я предполагаю, что он находит строку в таблице БД, а затем определяет, что это тип класса SynonymNode (по столбцу @DiscriminatorValue), а затем пытается заполнить класс, включая сопоставленную таблицу дополнительных столбцов с @ SecondaryTable.
Как я могу сказать, либо присоединиться к @SecondaryTable слева, либо вообще исключить его для этого конкретного запроса?
Спасибо, куча! Эта проблема убивает меня!
Я использую Hibernate 3.2.1 и Java 1.5
Ура,
Mark