在Hibernate标准中获取数据类型不匹配

时间:2014-04-16 14:05:36

标签: java hibernate sybase criteria

我在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)

是否可以比较这些值?

1 个答案:

答案 0 :(得分:0)

您的目标是检索char并将其转换为布尔值吗?

您可以使用通用枚举用户类型来实现此目的: https://community.jboss.org/wiki/Java5EnumUserType?_sscc=t

我过去曾经用过这个。