Eclipselink 实体类自动扫描发现非实体
Posted
技术标签:
【中文标题】Eclipselink 实体类自动扫描发现非实体【英文标题】:Eclipselink entity class autoscan finds non-entities 【发布时间】:2010-08-11 19:32:33 【问题描述】:我已经激活了 Eclipselink 2.0 的自动检测模式来查找 @Entity 注释类:
<exclude-unlisted-classes>false</exclude-unlisted-classes>
但是 Eclipselink 告诉我应该向我的实体添加一个 ID:
原因:异常 [EclipseLink-7161] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.ValidationException 异常描述:实体类 [class com.example.domain.Image] 没有指定主键。它应该定义@Id、@EmbeddedId 或@IdClass。如果您使用这些注释中的任何一个定义了 PK,请确保您的实体类层次结构中没有混合访问类型(已注释的字段和属性)。
示例类:
import java.util.HashSet;
import java.util.Set;
//@Entity No annotation!
public class Image extends File
private int width;
private int height;
private Set<Image> variants = new HashSet<Image>();
我如何告诉 Eclipselink 不是 @Entity 注释的类不是实体?
【问题讨论】:
什么版本的 EclipseLink?您确定已编译类中的 Image 没有 @Entity 注释吗?文件是实体吗? “文件作为实体”的好提示!File
类是一个实体,我将其注释掉以进行测试,但是由 Eclipselink 检查的编译类不是最新的。在mvn clean
之后一切正常。
【参考方案1】:
问题的根源是一个编译的类,它之前有一个@Entity
注释。编译后的类文件仍然有这个注解,因此 Eclipselink 认为它是一个实体。运行 maven clean
后一切正常。
【讨论】:
以上是关于Eclipselink 实体类自动扫描发现非实体的主要内容,如果未能解决你的问题,请参考以下文章
JEE、eclipselink、glassfish4.0 无法持久化实体
EclipseLink + JPA + 通用实体 + SINGLE_TABLE 继承
EclipseLink 拒绝将 PostgreSQL 上的本机查询映射到实体