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 上的本机查询映射到实体

JPA eclipselink坚持没有主键但有两个外键的实体

Eclipselink 未检测到脏实体

Eclipselink 实体持续存在问题