3

JPA エンティティに列挙型の 1 つのフィールドを使用します。

@Enumerated(value=EnumType.STRING)
private Temperament temperament = Temperament.MINEUR_PUR;

私の列挙型は私のエンティティ内で宣言されています:

@Entity
public class Joueur implements Serializable {

.....

    public enum Temperament{
        MINEUR_PUR(30),
        MINEUR(10),
        NEUTRE(0),
        RAIDEUR(-10),
        RAIDEUR_PUR(-30);

        private int temperament_prod_mines;

        private Temperament(int temperament_prod_mines){
            this.temperament_prod_mines = temperament_prod_mines;       
        }

        public int getTemperament_prod_mines() {
            return temperament_prod_mines;
        }

        public void setTemperament_prod_mines(int temperament_prod_mines) {
            this.temperament_prod_mines = temperament_prod_mines;
        }
    }   
}

それは機能しますが、独自のファイルで列挙型を「外部化」すると、機能しなくなります:

原因: 例外 [EclipseLink-7151] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.ValidationException Exception 説明: タイプ [class com.sim.basics.enums.Temperament] forエンティティ クラス [class com.sim.entities.Joueur] の属性 [気質] は、列挙されたマッピングの有効なタイプではありません。属性は、Java 列挙型として定義する必要があります。

しかし、それは単なるコピー&ペーストです...

なぜこの動作ですか?

ありがとう

4

2 に答える 2

5

この問題の原因の 1 つは、enum.jar で定義された列挙が実行時にエンティティによってクラスパスで見つからないことです。

これを解決するには、少なくとも 2 つの方法があります。

  1. entity.jar の META-INF/MANIFEST.MH 内

    クラスパス: enum.jar

  2. または、maven を使用する場合は、EAR の一部として enum.jar を指定します。

于 2012-11-23T11:39:25.700 に答える
0

このEclipseLink Exception Error Reference (ELUG)が役立つ場合があります

TOP-07151: エンティティ・クラス[{2}]の属性[{0}]のタイプ[{1}]は、列挙されたマッピングの有効なタイプではありません。属性は、Java 列挙型として定義する必要があります。

原因:アクセサ・メソッド methodName のエンティティ・クラス ClassName で、無効な EJB 3.0 注釈アノテーションが指定されました。サポートされていません。

処置:このアクセッサ・メソッドに有効な注釈を指定してください。

于 2012-11-23T10:50:16.733 に答える