JPA @MappedSuperclass在Eclipse中的单独JAR中

我有一个@MappedSuperclass AbstractEntity,我用于所有@Entity类。 只要超类与我的实体在同一个Eclipse项目中,它就可以完美地工作。 但是因为我在几个项目中重用了这个超类,所以我只想把它分解成自己的JAR文件。 当我这样做(当然我将JAR文件添加到构建路径中)时,Eclipse会在每个@Entity类上给出错误:

实体没有定义主键属性。

Eclipse突出显示@Entity注释作为错误的来源。 当然,所有类都inheritance自此AbstractEntity。 两个项目中的包名称相同。 JAR项目具有所有必需的构建路径 – 包含AbstractEntity的JAR文件项目中没有错误。

当我将它部署到我的应用服务器(JBoss 7.1)时,它工作正常。 这让我觉得它只是一个Eclipse问题,它错误地识别错误。

抽象实体:

package com.xyc.abc; import java.io.Serializable; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class AbstractEntity implements Serializable { private static final long serialVersionUID = 1L; private Long id; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getId() { return id; } public void setId(Long id) { this.id = id; } } 

简单实体类示例:

  @Entity public class TestEntity extends AbstractEntity { ... } 

我已经看到其他一些post说问题可能是超类中的注释是在getter而不是在字段上 – 如果你的实体中没有其他JPA注释,这只是一个问题,我这样做。 有任何想法吗?

看起来这与此处描述的错误有关:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=361042

最终修复它(更多的是一种解决方法)是将AbstractEntity添加到包含我的实体的项目中persistence.xml中的类列表中。 即使AbstractEntity位于一个单独的JAR并且本身不是一个具体的实体,我想这给了Eclipse足够的信息来阻止抱怨。 这似乎没有对应用程序本身产生任何不利影响。