【问题标题】:Hibernate Exception - Unknown name value休眠异常 - 未知名称值
【发布时间】:2014-08-11 21:10:16
【问题描述】:

我也有类似的问题 [Hibernate Exception: Unknown name value for enum class

但就我而言,

Unable to filter, so returning non filtered results.Unknown name value for enum class com.xxxx.enums.Status: DELIVERED
java.lang.IllegalArgumentException: Unknown name value for enum class com.xxxx.enums.Status: DELIVERED
    at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:128)
    at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:109)
    at org.hibernate.type.AbstractType.hydrate(AbstractType.java:104)


@Enumerated(value = EnumType.STRING)
@Column(name = "status", length = 10)
@AuditableField
private Status status;

public enum ReleaseStatus {
     DL("Delivered"),
}

一切似乎都很好,但我仍然遇到了这个异常。

【问题讨论】:

  • 会不会是您的枚举字段被称为DL 而不是DELIVERED
  • @beerbajay,如果你看另一个这样的帖子,被定义为“DL”没有问题
  • 我的意思是这两个名字不匹配。试试看吧。
  • @beerbajay,不可能 :( 作为该枚举的其他一些依赖项。

标签: java hibernate enums


【解决方案1】:

您的表中有字符串DELIVERED。这个字符串应该是ReleaseStatus 实例之一的name()。而ReleaseStatus 没有任何名为 DELIVERED 的实例。您发布的唯一一个名为DL

所以表中应该是DL 而不是DELIVERED。或者你应该将你的枚举实例重命名为DELIVERED,以匹配数据库表中存储的内容。

您可以定义一个自定义的 Hibernate 用户类型并将其也用于此枚举,这样当从数据库中获取“DELIVERED”时,Hibernate 会找到使用此值构造的枚举实例(并忽略大小写)。但是从一开始就存储正确的值对我来说似乎是一个更好的主意。

【讨论】:

    【解决方案2】:

    我更喜欢定义一个自定义转换器,例如:

        @Column
        @Convert(converter = StatusFirmaDocumentoConverter.class)  <<<<< :)
        @AuditableField
        private Status status;
    

    (注意:包含@Enumerated属性)并创建一个转换器来处理枚举器值,例如:

    public class CustomConverter implements AttributeConverter<Status, String> {
    
        @Override
        public String convertToDatabaseColumn(Status attribute) {
            return attribute.getValue() ;
        }
    
        @Override
        public Status convertToEntityAttribute(String dbData) {
            return  StatusFirmaDocumento.fromString(dbData);
        }
    
    }
    

    是的,很遗憾你不能告诉休眠“将 DL 转换为 DELIVERED”,反之亦然

    【讨论】:

    • 可能对其他人有用,但我使用 Convert 和 hibernate 离开了 Enumerated 忽略了转换器。确保只有转换!
    猜你喜欢
    • 2013-07-03
    • 2013-10-27
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2012-12-27
    • 2011-02-14
    相关资源
    最近更新 更多