【问题标题】:Getting Datatype mismatch in Hibernate Criteria在 Hibernate 标准中获取数据类型不匹配
【发布时间】:2014-05-31 11:10:54
【问题描述】:

我在 Sybase 数据库中有一个表,其中有一列 is_req。它的数据类型是 char(1)。它在我的 hbm 文件中的属性定义为:

property name="isRequired" column="is_req" type="boolean"

现在,当我尝试使用标准/限制进行比较时: criteria.add(Restrictions.ne("isRequired", '1'),我得到以下异常:

java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.Boolean
at org.hibernate.type.BooleanType.set(BooleanType.java:37)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:62)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:44)
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1115)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1177)
at org.hibernate.loader.Loader.doQuery(Loader.java:390)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.doList(Loader.java:1593)
at org.hibernate.loader.Loader.list(Loader.java:1577)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:111)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1322)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:300)

如果我尝试这样做 criteria.add("isRequired", Boolean.TRUE),我得到以下异常:

com.sybase.jdbc2.jdbc.SybSQLException:不允许从数据类型“VARCHAR”到“BIT”的隐式转换。使用 CONVERT 函数运行此查询。

at com.sybase.jdbc2.tds.Tds.processEed(Tds.java:2796)
at com.sybase.jdbc2.tds.Tds.nextResult(Tds.java:2126)
at com.sybase.jdbc2.jdbc.ResultGetter.nextResult(ResultGetter.java:69)
at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:220)
at com.sybase.jdbc2.jdbc.SybStatement.nextResult(SybStatement.java:203)
at com.sybase.jdbc2.jdbc.SybStatement.queryLoop(SybStatement.java:1578)
at com.sybase.jdbc2.jdbc.SybStatement.executeQuery(SybStatement.java:1563)
at com.sybase.jdbc2.jdbc.SybPreparedStatement.executeQuery(SybPreparedStatement.java:85)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:120)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1272)
at org.hibernate.loader.Loader.doQuery(Loader.java:391)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.doList(Loader.java:1593)

是否可以比较这些值?

【问题讨论】:

    标签: java hibernate sybase criteria


    【解决方案1】:

    您的目标是检索一个字符并将其转换为布尔值吗?

    您可以通过使用通用枚举用户类型来实现这一点: https://community.jboss.org/wiki/Java5EnumUserType?_sscc=t

    我过去曾使用过此功能。

    【讨论】:

    • 是的,这就是我想要实现的,它使用表达式作为标准。add(Expression.sql("{alias}.is_req = '0'"))
    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 2013-12-23
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多