Допустим, что класс «X» сопоставляется с таблицей «X». Класс «A» сопоставляется с таблицей «A», а «B» сопоставляется с таблицей «B».Критерий запроса на спящий режим для сопоставлений с наследованием
Таблица Х Структура: (X_ID, некоторые другие столбцы Таблица A Структура: (A_ID, X_Id, некоторые другие столбцы) Таблица B Структура: (A_ID, некоторые другие столбцы) ... Таблица B также имеет A_ID
Class 'B' расширяет класс 'а' у нас есть отображение файлов для обоих из них, как:.
класса 'A' Parent Mapping файла:
@Entity
@Table(name = 'A')
@Inheritance(stratergy=InheritanceType.Joined)
public abstract class A {
@Id @Clumns(name = "A_Id)
@GeneratedValue
protected Long aId;
-- some more A specific fields
}
Класс 'B' файл Mapping:
@Entity
@Table(name= 'B')
Public class B extends A{
---- B specific fields
}
Теперь у меня есть SQL-запрос, как показано ниже, что мне нужно писать, используя критерии Hibernate API.
select * from X
INNER JOIN A
ON X.id = A.id
INNER JOIN B
ON A.id = B.id
where B.name = 'XYZ'
and B.Sex = 'M'
Я придумал:
Criteria c = session.createCriteria(x.class, "x");
.createAlias("x.a", "a")
.createAlias("a.b", "b")
.add(Restrictions.eq("b.sex", "M"))
.add(Restrictions.eq("b.name", "XYZ"));
Но, если мы проверяем файл отображения, нет прямой ссылки В в А. Таким образом, спящий режим выбрасывает «B не связано с А» организация.
Есть ли способ это наследование может быть отображен в crteria запроса
Спасибо за ответ ... Но, если я не укажу «А» в критериях. как бы были куплены столбцы, которые мне нужны из «А»? – user1502377
См. Мое обновление для более подробного объяснения этого вопроса. –
позволяет сказать, что у нас есть другая таблица X, которая соединена с «A», а A имеет функциональность подкласса с «B». Тогда моими критериями станут: Критерии c = session.createCriteria (X.класс, «х»); .createAlias ("xa", "a") .createAlias ("ab", "b") .add (Restrictions.eq ("b.sex", "M")) .add (Restrictions.eq («b.name», «X» «« XYZ »)); Тогда как я могу обойти« A »здесь, поскольку X связан только с« A », но не« B » – user1502377