我在层次结构中有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
,我收到以下错误消息:
无法使用对象ID“Request-RequestPK @ c49aa166”实例化“Request”类型的抽象类;这可能表示该类的继承鉴别符未正确配置。
所有实体都在persistance.xml中正确定义,鉴别器列的名称也是正确的。可能是什么事情?
答案 0 :(得分:0)
不,实体可以是抽象的。
但我找到了原因。该查询是通用的,因此它请求实体的子实例化。其中一个儿子与使用实用工具罐中的枚举的其他实体有关系。但是...... jpa项目在构建路径上有这个jar,因为EAR项目在模块列表中没有包含这个jar,所以最后,jar不在运行时的类路径中。在这种情况下,错误消息通常无关紧要。
答案 1 :(得分:-1)
原因是“无法实例化类型的抽象类”,您的Request类是抽象的。为什么?它是一个实体,然后它不应该是抽象的。