【问题标题】:JPA and enum typeJPA 和枚举类型
【发布时间】:2012-11-23 19:53:17
【问题描述】:

我将枚举类型的一个字段用于 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] 的类型 [class com.sim.basics.enums.Temperament] 不是枚举映射的有效类型。该属性必须定义为 Java 枚举。

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

为什么会有这种行为?

谢谢

【问题讨论】:

  • 您是否将枚举放在单独的 lib.jar 中?
  • 确实如此。它在 EAR 中与 maven 一起打包,我的实体及其枚举类型不在同一个 JAR 中。我将在同一个 JAR 中进行测试。感谢这个想法
  • 当包含枚举的 .jar 对实体不可见时,我最终得到了完全相同的症状
  • 这是问题的原因,当我将我的枚举移动到与我的实体相同的 JAR 中时,它可以工作...是否有解决方法将我的枚举保留在实体 JAR 之外?泰
  • 在 entity.jar 的 meta-inf/manifest 中,我必须添加类路径:enum.jar。有点脏,但不知道另一种方式。不在 pppphone 上时添加正确的答案

标签: java caching jpa


【解决方案1】:

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

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

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

    类路径:枚举.jar

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

【讨论】:

    【解决方案2】:

    这个EclipseLink Exception Error Reference (ELUG)可以帮到你

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

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

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

    【讨论】:

    • 您好,谢谢您的回答。我的问题解决了(见上文)
    猜你喜欢
    • 2021-03-05
    • 2019-07-14
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 2012-09-16
    • 2016-01-17
    相关资源
    最近更新 更多