2012-01-27 2 views
2

Я хочу использовать объекты спящего режима в проекте, как определено ниже.Наследование объектов Hibernate без отображения таблицы

@Table(name = "Parent") 
class Parent{ 

    int id; 
    String name; 

} 

@Table(name = "Child") 
class Child extends Parent{ 
    String schoolNo; 
} 

Но в базе; С этими двумя таблицами нет никакого отношения.

Столбцы родительских столов; id, имя

Столы для детских таблиц; Идентификатор, имя и schoolNo

Если я использую

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 

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

И если я использую

@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 

зимуют хочет столбец дискриминатора.

Мне нужно, чтобы hibernate отправляет запрос выбора для каждого класса в таблицу.

С уважением.

+0

Почему вы определяете стратегию наследования, когда нет связи между таблицами? – Perception

+0

Я понял вашу мысль о глупой архитектуре. На самом деле это не таблица. Это представления, генерирующие множество комбинаций таблиц. Те же поля, кроме данных, из действительно разных таблиц. На самом деле объекты результата одинаковы для разработчиков с небольшой разницей. Надеюсь, объяснение будет ясным. –

+0

Вы пытались просто не использовать @Inheritance? –

ответ

2

TABLE_PER_CLASS является правильной стратегией здесь.

Странно, что Hibernate генерирует запрос объединения по обеим таблицам, но это должно работать. Подзапрос по неправильной таблице ничего не найдет, поэтому результаты будут верными. Это звучит как ошибка в генерации запросов Hibernate для подклассов.

+0

it выглядит как true, но «ничего не найдет» на самом деле не так. Как я уже говорил, это представления и использует некоторые общие таблицы для запроса, и я попытался и действительно перечислил значения из обеих таблиц. –

+0

Это может быть только в том случае, если один и тот же идентификатор используется как для родителя, так и для ребенка. Это не должно быть так. Это происходит? –

+0

К сожалению, да –

0

В аналогичной ситуации я использую @Inheritance(strategy = InheritanceType.JOINED) на родительской таблице.

Смотреть подробнее в документации Hibernate: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#d0e1168

+0

Если я использую JOINED-стратегию, спящий сгенерированный SQL показан как «Select * from Parent, Child, где Parent.id = Child.id (+), но мне нужно только« Select * from Child »или только« Select * from Parent » –

Смежные вопросы