一、获取记录总数问题
例子:
public Integer findRows(Comment entity) {
BigInteger result = BigInteger.ZERO;
StringBuilder sql = new StringBuilder();
sql.append(" SELECT COUNT(c.id) FROM ");
sql.append(" t_comment c ");
sql.append(" WHERE ");
sql.append(" c.belong_id=:belongId ");
sql.append(" AND c.belong_type=:belongType ");
logger.info("SQL:{}", sql.toString());
Query query = em.createNativeQuery(sql.toString(),Integer.class);
query.setParameter("belongId", entity.getBelongId());
query.setParameter("belongType", entity.getBelongType());
result = (BigInteger) query.getSingleResult();
return result.intValue();
}
异常:
javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown entity: java.lang.Integer
解决方法:
Query query = em.createNativeQuery(sql.toString(),Integer.class); ===>
Query query = em.createNativeQuery(sql.toString());
同时注意c.id的数据类型,我库里用的是BigInt,而且是原生SQL查询,所以自动映射成BigInteger,
如果是非原生SQL查询,可能映射成你在Entity定义的类型。
本文介绍了一个关于使用原生SQL查询记录总数时遇到的异常及其解决办法。异常为javax.persistence.PersistenceException,原因是查询参数设置错误导致实体映射失败。文章详细展示了如何修正查询语句,并确保返回正确的记录数。
1324

被折叠的 条评论
为什么被折叠?



