JPA-запрос для DTYPE - PullRequest
       12

JPA-запрос для DTYPE

4 голосов
/ 15 января 2010

У меня есть одна таблица, которая генерируется из двух сущностей jpa (наследование). Итак, у нас есть столбец DTYPE, сгенерированный в таблице базы данных, в которой имя объекта имеет значения.

Как мне написать jpa-запрос для извлечения данных для любой заданной сущности. т.е. DTYPE = 'A'?

Я только что попытался использовать DTYPE в запросе jpa, но, как и ожидалось, я получил ошибку «Не удалось разрешить свойство». Пожалуйста, дайте мне знать, как написать этот запрос.

Примечание. Я не хочу использовать собственный запрос.

Обновление:

У меня есть класс A и подкласс AA, который расширяет A. DTYPE имеет два значения A и AA.

Когда я запрашиваю A, я получаю все объекты A плюс AA. Как исключить AA, когда я запрашиваю A?

Ответы [ 4 ]

4 голосов
/ 27 апреля 2011

Просто добавьте простое поле dtype в ваш родительский класс.

@ Column (вставляемый = ложный, обновляемый = ложный) приватная строка dtype;

Итак, вы можете использовать его в своем запросе JPQL

2 голосов
/ 15 января 2010

Вы можете использовать имена объектов в ваших запросах JPA, столбец дискриминатора удален.

Предположим, у вас есть два класса сущностей SubClassA и SubClassB, которые оба наследуются от SuperClass, тогда вы можете запросить эти объекты следующим образом:

FROM SubClassA WHERE [...]

или

FROM SubClassB WHERE [...]

Если вы хотите запросить оба объекта, используйте

FROM SuperClass WHERE [...]
2 голосов
/ 15 января 2010

Предполагается, что у вас есть три объекта:

  • Вечеринка (суперкласс)
  • Человек (расширяет партию)
  • Организация (расширяет партию)

, где последние два - это две сущности, которые вы храните со столбцом дискриминатора, ваш запрос JPA-QL должен быть таким простым:

select p from Person p

чтобы получить всех людей. JPA достаточно умен, чтобы понять это. Также вы можете сделать:

select p from Party p

и получите их все.

1 голос
/ 16 октября 2014

В дополнение к тому, что сообщение @SCH, и поскольку это не работало напрямую для меня, при использовании Oracle я получил исключение, говорящее, что "dtype" является своего рода зарезервированным ключевым словом. Я тогда сделал

@DiscriminatorColumn(name = "myDType")
class abstract AbstractClass{

@Column(insertable = false, updatable = false) 
private String myDType; 
[...]

Это хорошо для меня, так как таким образом я мог динамически изменять тип, который я хочу запросить, используя условие where вместо изменения оператора FROM.

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