@Enumerated(EnumType.STRING)导致没有为值[0]提供转换值

时间:2013-12-04 12:14:43

标签: jpa eclipselink enumerated-types

我一直都在使用它,但现在已经不再使用了。真奇怪。代码段:

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

...

public enum State {
    LIVE,
    DELETED;
}

在db中,只有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] ...'提供)来 - 不知何故 - 到位,但我不知道为什么以及如何摆脱它。

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

THX

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

2 个答案:

答案 0 :(得分:0)

如果枚举列没有填充数据库中列的值,则会出现此错误,例如: 您在列表名称{status1,status2,status3,status4}的数据库表状态中定义 表示java枚举,以及枚举状态{status1,status2,status3} 在这种情况下,status1,status2和status3匹配数据库中的值,但status4与任何值都不匹配(不存在),在这种情况下将出现此错误。

答案 1 :(得分:0)

就我而言,我已经用另一个应用程序修改了表,该应用程序允许在所有字段中使用空值(当然,除了主键之外)。当我返回第一个应用程序(最初运行良好)时,出现了此异常。因此,我截断(删除表中的所有行),应用程序现在可以正常运行。