【问题标题】:@Enumerated(EnumType.STRING) causes No conversion value provided for the value [0]@Enumerated(EnumType.STRING) 导致没有为值 [0] 提供转换值
【发布时间】:2013-12-20 22:11:19
【问题描述】:

我一直在使用它,但现在它不再起作用了。真的很奇怪。代码sn-p:

@Column(name = "STAT", length = 16)
@Enumerated(EnumType.STRING)
private State state = State.LIVE;

...

public enum State {
    LIVE,
    DELETED;
}

在数据库中,只有使用 LIVE 或 DELETED 存储的值。没有空值。

但我得到: 异常 [EclipseLink-116] (Eclipse Persistence Services - 2.4.2.v20130514-5956486): org.eclipse.persistence.exceptions.DescriptorException 异常描述:没有为字段 [WERK.STAT] 中的值 [0] 提供转换值。 映射:org.eclipse.persistence.mappings.DirectToFieldMapping[state-->WERK.STAT]

在我看来,序数('...为值 [0]...提供)以某种方式出现 - 以某种方式 - 到位,但我不知道为什么以及如何摆脱它。

我正在使用 glassfish 3.1.2,它使用 eclipselink 2.3.2。我升级到 eclipselink 2.4.2,结果相同。 这很奇怪,因为它在我的开发机器上运行没有任何问题。我正在使用 mysql 5.6.14。

谢谢

知道了。异常文本终于错了。我发现 [0] 值,但在一个完全不同的表中(根本没有引用 WERK),并且已经使用包含这些 [0] 值的 sql 脚本导入(我的错)。因此,如果您遇到过类似的问题,您必须检查整个数据库内容,而不仅仅是提到的内容。

【问题讨论】:

  • 更多信息:
  • 一些进一步的信息:属性'state'在@Embeddable实体中定义,在调用与WERK实体无关的em.find(RoleEntity.class, id)时抛出异常
  • 我们现在切换到另一个没有数据的 mysql 服务器,它工作正常。
  • 所以,它与 db 或其数据有关,因为之前的测试告诉我,它与应用程序、jdbc-driver、glassfish 无关......但是数据库中的所有数据都是几个小时前由同一个应用程序写入的。

标签: jpa eclipselink enumerated-types


【解决方案1】:

如果枚举列与数据库中列的值不匹配,则会出现此错误,例如: 您在数据库表状态中定义列名 {status1, status2, status3, status4} 表示 java 枚举和枚举状态{status1, status2, status3} 本例中status1、status2、status3匹配数据库中的值,而status4不匹配任何值(不存在),此时会出现此错误。

【讨论】:

    【解决方案2】:

    在我的例子中,我用另一个应用程序修改了表,允许在所有字段中使用空值(当然除了主键)。当我返回我的第一个应用程序(最初运行良好)时,我得到了这个异常。所以我截断(删除表中的所有行),应用程序现在运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      相关资源
      最近更新 更多