JPA和枚举类型

我在一个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; } } } 

这是工作,但当我将我的枚举“外化”在它自己的文件中时,它不再起作用了:

引发者:exception[EclipseLink-7151](Eclipse Persistence Services – 2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.ValidationExceptionexception描述:类型[class com.sim.basics.enums.Temperament] for实体类[class com.sim.entities.Joueur]上的属性[temperament]不是枚举映射的有效类型。 该属性必须定义为Java枚举。

但它只是复制/粘贴……

为什么会这样?

谢谢

导致此问题的一个原因是enum.jar中定义的枚举在运行时未在实体的类路径中找到。

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

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

    classpath:enum.jar

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

EclipseLinkexception错误参考(ELUG)可能对您有所帮助

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

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

操作:在此访问器方法上指定有效的注释。