Как сделать запрос по свойствам полиморфных критериев Hibernate? - PullRequest
2 голосов
/ 10 ноября 2011

Предположим,

@Entity 
Class Animals { }

@Entity
@Inheritance( stragegy = InheritanceType.JOINED)
class Dogs extends Animals {
    private String furType;
}

@Entity
@Inheritance( stragegy = InheritanceType.JOINED)
class Cat extends Animals {
    private String furType;
}

Все сущности являются реальными классами в моей базе данных, и у меня нет возможности перепроектировать нашу базу данных.

Как я могу использовать DetactedCriteria для создания запроса на дизъюнкцию, который говорит, что дай мне все «Животные», где furType = «громко» для собак ИЛИ furType = «мягко» для кошек? Извините, я не спроектировал иерархию классов, поэтому я не несу ответственности за тот факт, что имена свойств совпадают, и я не могу изменить его, потому что есть другие подклассы, таблицы которых не содержат "furType".

1 Ответ

1 голос
/ 11 ноября 2011

В JPA 2.0 вы можете использовать конструкцию TYPE() для выполнения этой работы. Примерно так (не проверено) должно работать:

SELECT a 
  FROM Animals a 
  WHERE (TYPE(a) = Dogs AND a.furType = 'loud') OR 
        (TYPE(a) = Cat AND a.furType = 'soft')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...