我在Sybase数据库中有一个表,其中包含一个is_req列。它的数据类型是char(1)。它的属性定义在我的hbm文件中:
property name =“isRequired”column =“is_req”type =“boolean”
现在,当我尝试使用Criteria / Restrictions进行比较时:
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)
是否可以比较这些值?
答案 0 :(得分:0)
您的目标是检索char并将其转换为布尔值吗?
您可以使用通用枚举用户类型来实现此目的: https://community.jboss.org/wiki/Java5EnumUserType?_sscc=t
我过去曾经用过这个。