Именованный запрос на абстрактную сущность - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть 3 объекта в иерархии:

Request.java

@Entity
@Table(name="Request")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="REQUEST_TYPE", discriminatorType=DiscriminatorType.INTEGER)
@NamedQuery(name="getRequestsById", query="select r from Request r where r.id=:id and r.status=100")
public abstract class Request implemenst Serializable {
...
}

MedicineRequest.java

@Entity
@Table(name="MED_REQUEST")
public abstract class MedicineRequest extends Request {
...
}

ExtendedMedicineRequest.java

@Entity
@Table(name="EXT_MED_REQUEST")
@DiscriminatorValue("1")
public class ExtendedMedicineRequest extends MedicineRequest {
...
}

Когда я пытаюсь выполнить вышеуказанный запрос, getRequestsById, я получаю следующее сообщение об ошибке:

Невозможно создать экземпляр абстрактного класса типа «Запрос» с идентификатором объекта «Request-RequestPK @ c49aa166»; это может указывать на то, что дискриминатор наследования для класса настроен неправильно.

Все сущности определены правильно в persistance.xml, имя столбца дискриминатора тоже корректно. В чем может быть дело ??

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Нет, для субъекта нормально быть абстрактным.
Но я нашел причину.Запрос является общим, поэтому он запрашивает создание экземпляров сыновей этого объекта.Один из сыновей имеет отношение к другой сущности, которая использует enum из утилиты jar.Но ... у проекта jpa есть этот jar на пути сборки, тогда как проект EAR не включает этот jar в список модулей, поэтому, наконец, jar не был на пути к классам во время выполнения.В этом случае сообщение об ошибке обычно не имеет значения.

0 голосов
/ 14 ноября 2011

Причина в том, что "Не удается создать экземпляр абстрактного класса типа", ваш класс Request является абстрактнымЗачем?Это сущность, тогда она НЕ ДОЛЖНА быть абстрактной.

...