Проблемы отображения и наследования в спящем режиме с @SecondaryTable - PullRequest
1 голос
/ 18 мая 2009

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

1 Ответ

2 голосов
/ 02 ноября 2009

Я считаю, что проблема в том, что вы должны указать, какие поля вы отображаете в свою @SecondaryTable ...

В аннотации @Column установите атрибут table: @Column (name = "somecol", table = "secondTable")

Hibernate жалуется, потому что он ищет ваши поля в исходной таблице, когда он должен искать их во вспомогательной таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...