我的代码中有以下代码
String sql = "SELECT COUNT(*) FROM CustomerData WHERE custId = :custId AND deptId = :deptId";
Query query = session.createQuery(sql);
query.setParameter("custId", custId);
query.setParameter("deptId", deptId);
long count =(long) query.uniqueResult(); //line 1
Run Code Online (Sandbox Code Playgroud)
Hibernate在第1行抛出异常
org.hibernate.NonUniqueResultException: query did not return a unique result:
Run Code Online (Sandbox Code Playgroud)
我不确定发生了什么,因为count(*)总是只返回一行.此外,当我直接在db上运行此查询时,它将结果返回为1.那么问题是什么?
GRO*_*X13 20
看起来您的查询返回多个结果检查数据库.在文档中query.uniqueResult()你可以阅读:
抛出:org.hibernate.NonUniqueResultException - 如果有多个匹配结果
如果要避免此错误并仍使用唯一结果请求,则可以使用此类变通方法 query.setMaxResults(1).uniqueResult();
小智 15
Hibernate 可选 findTopByClientIdAndStatusOrderByCreateTimeDesc(Integer clientId, Integer status);
“找顶”!!结果只有一个!
小智 10
我认为其他答案没有解释关键部分:为什么“COUNT(*)”返回多个结果?
我今天刚遇到同样的问题,我发现如果你有另一个类扩展目标映射类(这里是“CustomerData”),Hibernate 会做这个魔术。
希望这会为其他不幸的人节省一些时间。
通常,当查询结果(在您的情况下存储在对象中)无法转换为所需的对象时,Oracle 会抛出此异常。例如,当结果是
List<T>
Run Code Online (Sandbox Code Playgroud)
并且您将结果放入单个 T 对象中。
在强制转换为长错误的情况下,除了建议使用包装器类以便所有列的行为都相同之外,我猜事务或查询本身的问题会导致此问题。
小智 -7
首先你必须测试查询列表的大小;这是一个例子:
long count;
if (query.list().size() > 0)
count=(long) criteria.list().get(0);
else
count=0;
return count;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68813 次 |
| 最近记录: |