3

我将枚举类型的一个字段用于 JPA 实体:

@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 异常描述:类型 [class com.sim.basics.enums.Temperament] 为实体类 [class com.sim.entities.Joueur] 上的属性 [temperament] 不是枚举映射的有效类型。该属性必须定义为 Java 枚举。

但这只是复制/粘贴...

为什么会有这种行为?

谢谢

4

2 回答 2

5

这个问题的一个原因是在 enum.jar 中定义的枚举在运行时没有被实体在类路径中找到。

至少有两种方法可以解决这个问题。

  1. 在 entity.jar 的 META-INF/MANIFEST.MH 中

    类路径:枚举.jar

  2. 或者,如果您使用 maven,则将 enum.jar 指定为 EAR 的一部分。

于 2012-11-23T11:39:25.700 回答
0

这个EclipseLink 异常错误参考 (ELUG)可以帮助你

ECLIPSELINK-07151:实体类 [{2}] 上属性 [{0}] 的类型 [{1}] 不是枚举映射的有效类型。该属性必须定义为 Java 枚举。

原因:在访问器方法 methodName 上的实体类 ClassName 中指定了无效的 EJB 3.0 注释注释。不支持。

行动:在此访问器方法上指定一个有效的注释。

于 2012-11-23T10:50:16.733 回答