JPA @MappedSuperclass在Eclipse中的单独JAR中

时间:2012-08-20 21:49:28

标签: java eclipse jpa entity mappedsuperclass

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

实体没有定义主键属性。

Eclipse突出显示@Entity注释作为错误的来源。当然,所有类都继承自此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 {
 ...
 }

我看到其他一些帖子说问题可能是超类中的注释是在getter而不是在字段上 - 如果你的实体中没有其他JPA注释,这只是一个问题,我做。有什么想法吗?

1 个答案:

答案 0 :(得分:9)

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

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

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