java - 如何正确检查数据库中是否存在行?

标签 java hibernate criteria

我的 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 控制台中检查此选择命令时,它返回正确的值。那么我做错了什么?

最佳答案

看看this other questionuniqueResult 方法至少返回一个 Number,然后尝试以下操作:

long rowCount = ((Number)cr.uniqueResult()).longValue();
return (rowCount > 0) ? true : false;

关于java - 如何正确检查数据库中是否存在行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068706/

相关文章:

java - 在java 8中迭代List并在迭代时调用另一个函数

java - java.util.zip.Deflater 和 java.util.zip.Inflater 类线程安全吗

Hibernate JPA 如何在persistence.xml 中配置动态更新

java - Orders 和 Employee 之间的 JPA 关系

java - 使用 Struts2 提示下载文件

java - KARAF OSGI bundle 上的自定义 hibernate.cfg.xml 位置

java - OneToMany 上的重复条目

java - Hibernate 中的 ResultTransformer 返回 null

.net - 带有过滤条件的 LINQ 连接

java - Hibernate 标准 MAX 或 SUM