0

我在层次结构中有 3 个实体:

请求.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 中正确定义,鉴别器列的名称也是正确的。怎么回事??

4

2 回答 2

0

不,实体可以是抽象的。
但我找到了原因。该查询是通用的,因此它请求实例化该实体的儿子。其中一个儿子与使用实用程序 jar 中的枚举的其他实体有关系。但是...jpa 项目在构建路径上有这个 jar,而 EAR 项目在模块列表中不包含这个 jar,所以最后,这个 jar 在运行时不在类路径上。在这种情况下,错误消息通常无关紧要。

于 2011-11-15T06:12:00.353 回答
-1

原因是“无法实例化类型的抽象类”,您的 Request 类是抽象的。为什么?它是一个实体,那么它不应该是抽象的。

于 2011-11-14T16:00:57.970 回答