すべての @Entity クラスに使用する @MappedSuperclass AbstractEntity があります。スーパークラスがエンティティと同じ 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 {
...
}
スーパークラスの注釈がフィールドではなくゲッターにあることが問題である可能性があると言っている他の投稿を見てきました-これは、エンティティ内に他のJPA注釈がない場合にのみ問題になります。何か案は?