2

我的 DAO 方法之一包含以下方法:

@Override
public boolean isAvailable(String code) {
    Criteria criteria = getSession().createCriteria(MyEntity.class);
    cr.add(Restrictions.eq("code", code).ignoreCase());
    cr.setProjection(Projections.rowCount());
    Long rowCount = (Long) cr.uniqueResult();
    return (rowCount > 0) ? true : false;
}

在最后一行抛出以下异常:

org.hibernate.exception.DataException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:102)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2452)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)
at org.hibernate.loader.Loader.list(Loader.java:2187)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1706)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:369)

code是此表中的主键。Hibernate 正在控制台中生成其选择命令。当我在数据库的 SQL 控制台中检查此选择命令时,它会返回正确的值。那么我做错了什么?

4

2 回答 2

1

看看这个其他问题。该方法uniqueResult至少返回一个Number,然后试试这个:

long rowCount = ((Number)cr.uniqueResult()).longValue();
return (rowCount > 0) ? true : false;
于 2012-10-25T13:56:50.017 回答
0

我的问题的解决方案非常棘手。code上面我的方法中的参数是解决方案的关键。一开始我在 Hibernate 实体类中有与此参数对应的列,定义为具有 5 个符号长度的 varchar。与此同时,我不得不将其长度更改为只有 2 个标志。但我调用的方法仍然是 5 个符号字符串长度。这就是我的错误发生的原因。我再次将 varchar 的长度更改为 5 个标志,此时一切都很好。

于 2013-01-13T01:14:03.823 回答