4

すべての @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注釈がない場合にのみ問題になります。何か案は?

4

1 に答える 1

9

これは、ここで説明されているバグに関連しているようです。

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

最終的にそれを修正したのは(実際には回避策のほうが多い)、エンティティを含むプロジェクトAbstractEntityのクラスのリストに を追加することです。は別の場所にあり、persistence.xmlそれ自体は具体的なエンティティではありませんが、これにより Eclipse に文句を言うのをやめるのに十分な情報が得られると思います。これによるアプリケーション自体への悪影響はないようです。AbstractEntityJAR

于 2012-08-21T14:01:22.447 に答える