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中定义的枚举在运行时未在实体的类路径中找到。
至少有两种方法可以解决这个问题。
-
在entity.jar的META-INF / MANIFEST.MH中
classpath:enum.jar
-
或者,如果使用maven,则将enum.jar指定为EAR的一部分。
此EclipseLinkexception错误参考(ELUG)可能对您有所帮助
ECLIPSELINK-07151:实体类[{2}]上属性[{0}]的类型[{1}]不是枚举映射的有效类型。 该属性必须定义为Java枚举。
原因:在访问器方法methodName上的实体类ClassName中指定了无效的EJB 3.0注释批注。 它不受支持。
操作:在此访问器方法上指定有效的注释。