2010-01-19 2 views
1

Я постараюсь обобщить мой вопрос.Поиск наследования в спящем режиме

У меня есть базовый класс «База» с тремя свойствами. На него наследуются четыре класса - «A», «B», «C» и «D». Они добавляют свои дополнительные свойства. Я сопоставил это с InheritanceType.JOINED. Теперь я хочу искать объекты «Base», что означает, что я ищу общие свойства всех объектов «A», «B», «C» и «D». Я знаю, как это сделать. Hibernate поддерживает его из коробки.

Но я хочу иметь функцию поиска не по всем типам, а по части их. Например, есть флажки, и пользователь выбрал поиск по «A» и «D». Опять поиск осуществляется по общим трем свойствам класса «Base». Должен ли я добавить дополнительный столбец в базовый класс для дифференциации типа и заполнения его вручную? Я уверен, что у Hibernate есть что-то из коробки, но я не могу его найти.

С уважением, Петар

ответ

0

Я пробовал то, что написал выше, и это работает. Поэтому добавьте столбец «type» в «Base» для дифференциации между дочерними элементами. Запросов: "from Base where (prop1=:value1) and (prop2=:value2) and (prop3=:value3) and (type in ('1', '4'))".

1

Вы можете назвать несколько объектов в HQL из пункта:

from A,D where prop1=:value 

может быть, вам нужно назвать свойства в где положение отдельно (я надеюсь, нет, но вы Вам необходимо попробовать:

from A as aa,D as dd where aa.prop1= :value or dd.prop1= :value 
+0

EJB, спасибо за ответ! Я дам ему попробовать. Но я искал что-то вроде «from Base, где prop1 =: value и TypeOfChilds в (A.class, D.class). Возможно ли это с Hibernate? –

+0

Не то, чтобы я знаю, извините. – EJB

+0

Я пробовал ваши предложения, но оба из них не работают для меня. Может быть, я добавлю дополнительный столбец «type» в класс Base для дифференциации. Таким образом, запрос будет выглядеть так: «from Base где где prop1 =: value и ((type = 1) или (тип = 4)). Но я считаю, что есть лучшее решение. –

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