JPA和枚举类型

时间:2012-11-23 10:03:01

标签: java caching 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;
        }
    }   
}

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

  

引起:异常[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枚举。

但它只是一个复制/粘贴...

为什么会出现这种情况?

由于

2 个答案:

答案 0 :(得分:4)

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

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

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

    classpath:enum.jar

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

答案 1 :(得分:0)

EclipseLink Exception Error Reference (ELUG) 可以帮助您

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

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

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