gpt4 book ai didi

java - hibernate中的查询枚举抛出DataException : Bad value for type int : t

转载 作者:行者123 更新时间:2023-11-30 02:58:00 25 4
gpt4 key购买 nike

我有一个表,其中映射的枚举类型属性如下:

@Enumerated(EnumType.ORDINAL)
@Column(name = "status")
private Enums.Status status;

Enums.Status 的位置

public enum Status {
CHECKED(1),
DISABLED(2),
INACTIVE(3);
int id;
// constructor + getter
}

数据库中的列状态存储为类型 int4

我正在使用以下 HQL 查询表:

Query q = session.createQuery(" from Users where status=:account");
query.setParameter("account", Enums.Status.CHECKED);
List<Users> users = query.list();

上面的代码在我的测试服务器上运行良好,但在生产服务器上时会抛出以下异常:

org.hibernate.exception.DataException: Bad value for type int : t
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:134)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
at org.hibernate.engine.jdbc.internal.proxy.AbstractResultSetProxyHandler.continueInvocation(AbstractResultSetProxyHandler.java:108)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at com.sun.proxy.$Proxy30.getInt(Unknown Source)
at org.hibernate.type.EnumType$OrdinalEnumValueMapper.getValue(EnumType.java:358)
at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:105)
at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:127)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:106)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2873)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1668)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1600)
at org.hibernate.loader.Loader.getRow(Loader.java:1500)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:712)
at org.hibernate.loader.Loader.processResultSet(Loader.java:940)
at org.hibernate.loader.Loader.doQuery(Loader.java:910)

我尝试用其 .ordinal() 值替换枚举参数,但收到另一个异常。我尝试查找测试服务器和生产服务器之间的差异,但它们都使用相同的 java 版本、hibernate 库、表数据类型和表内容。

有人遇到过类似的问题或知道如何解决吗?

最佳答案

我已经找到问题所在了。在我们的例子中,生产服务器有多个模式,其中一个模式的数据库更新失败,导致字段的数据类型与其 hibernate 映射不同。

如果有人来到这里寻找相同错误的答案,请尝试以下操作:

  • 对于枚举,验证数据库中的数据类型是否为用于映射 @Enumerated(EnumType.ORDINAL) 的整数(或用于 EnumType.STRING 的 varchar)
  • 验证该表的所有其他数据类型是否与 Hibernate 映射匹配
  • 验证数据库内的值不超过枚举中的项目数
  • 验证所有架构中的数据(如果您使用多个架构)
  • 如果您在一台服务器上遇到此错误,而在另一台服务器上没有遇到此错误,请检查以下差异:jdk 版本、hibernate-core 版本、数据库驱动程序版本。如果它们都相同,请尝试将数据库从一台服务器转储到另一台服务器

关于java - hibernate中的查询枚举抛出DataException : Bad value for type int : t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36710837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com