我在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.entities.Joueur]上属性[temperament]的类型[类com.sim.basics.enums.Temperament]不是枚举映射的有效类型。该属性必须定义为Java枚举。
但它只是一个复制/粘贴...
为什么会出现这种情况?
由于
答案 0 :(得分:4)
此问题的一个原因是enum.jar中定义的枚举在运行时未在实体的类路径中找到。
至少有两种方法可以解决这个问题。
在entity.jar的META-INF / MANIFEST.MH
中classpath:enum.jar
或者,如果您使用maven,则将enum.jar指定为EAR的一部分。
答案 1 :(得分:0)
EclipseLink Exception Error Reference (ELUG) 可以帮助您
原因:在访问器方法methodName上的实体类ClassName中指定了无效的EJB 3.0注释批注。它不受支持。
操作:在此访问器方法上指定有效的注释。