跪求:请各位ibatis高人指点下面这个错误,万分感谢!
java.sql.SQLException: Error: executeQueryForObject returned too many results.
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForObject(MappedStatement.java:124)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:518)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:493)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:110)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:86)
at com.cgj.dao.EmployeeDaoImpl.select(EmployeeDaoImpl.java:13)
at com.cgj.serice.ServiceImpl.selectEmployee(ServiceImpl.java:44)
at com.cgj.main.Testit.main(Testit.java:24)
Exception in thread "main" java.lang.NullPointerException
at com.cgj.main.Testit.main(Testit.java:25)
现在Ibatis中写的查询语句是一个带group by分组的SQL语句,返回的resultClass是一个DTO实体类。即Ibatis中该SQL查询结果集的resultClass="protocolDTO",protocolDTO是一个JAVABEAN是实体类。由于业务的需要查询结果需要进行分页,在DAO中需要调用一个返回值为PageBean<ProtocolDTO>的方法以完成分页功能,DAO中自定义的方法也需要返回PageBean<ProtocolDTO>,其中PageBean是一个封装的分页类,ProtocolDTO是一个JAVABEAN是实体类,现在就报上面的错误。
原SQL如下形式:
<select id="searchProtocol" parameterClass="java.util.Map" resultClass="protocolDTO">
select a.id id,b.name,c.status,b.length,
decode(sum(b.length),0,0,b.length/sum(b.length) over(partition by b.name) * 100) rate
from a,b,c
where a.id=c.id and b.code=c.code
and b.state in ('12','16')
group by a.id id,b.name,c.status,b.length
</select>
但若改成如下形式却不再报上面的错误
<select id="searchProtocol" parameterClass="java.util.Map" resultClass="protocolDTO">
select d.id id,d.name name,d.status,d.rate
from(select a.id id,b.name name,c.status status,b.state state,
decode(sum(b.length),0,0,b.length/sum(b.length) over(partition by b.name) * 100) rate
from a,b,c
where a.id=c.id and b.code=c.code
group by a.id id,b.name,c.status,b.length) d
where d.state in ('12','16')
</select>
请各位高人指点这是为什么?实在搞不明白了!
万分感谢各位了!
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForObject(MappedStatement.java:124)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:518)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:493)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:110)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:86)
at com.cgj.dao.EmployeeDaoImpl.select(EmployeeDaoImpl.java:13)
at com.cgj.serice.ServiceImpl.selectEmployee(ServiceImpl.java:44)
at com.cgj.main.Testit.main(Testit.java:24)
Exception in thread "main" java.lang.NullPointerException
at com.cgj.main.Testit.main(Testit.java:25)
现在Ibatis中写的查询语句是一个带group by分组的SQL语句,返回的resultClass是一个DTO实体类。即Ibatis中该SQL查询结果集的resultClass="protocolDTO",protocolDTO是一个JAVABEAN是实体类。由于业务的需要查询结果需要进行分页,在DAO中需要调用一个返回值为PageBean<ProtocolDTO>的方法以完成分页功能,DAO中自定义的方法也需要返回PageBean<ProtocolDTO>,其中PageBean是一个封装的分页类,ProtocolDTO是一个JAVABEAN是实体类,现在就报上面的错误。
原SQL如下形式:
<select id="searchProtocol" parameterClass="java.util.Map" resultClass="protocolDTO">
select a.id id,b.name,c.status,b.length,
decode(sum(b.length),0,0,b.length/sum(b.length) over(partition by b.name) * 100) rate
from a,b,c
where a.id=c.id and b.code=c.code
and b.state in ('12','16')
group by a.id id,b.name,c.status,b.length
</select>
但若改成如下形式却不再报上面的错误
<select id="searchProtocol" parameterClass="java.util.Map" resultClass="protocolDTO">
select d.id id,d.name name,d.status,d.rate
from(select a.id id,b.name name,c.status status,b.state state,
decode(sum(b.length),0,0,b.length/sum(b.length) over(partition by b.name) * 100) rate
from a,b,c
where a.id=c.id and b.code=c.code
group by a.id id,b.name,c.status,b.length) d
where d.state in ('12','16')
</select>
请各位高人指点这是为什么?实在搞不明白了!
万分感谢各位了!
...全文
相关推荐
ibatis的错误总结
ibatis的错误总结
ibatis应对批量update
最近遇到需要批量update数据的问题,一开始用了一个for循环去update,数据量大的时候效率很低。原因是for循环每次update一条语句,都是一次连接过程。遇到大批数据更新的时候,效率就可想而知了。在google上找了一遍,发现ibatis里有对批量update的支持,挺好的东西。
配置ibatis3.0时,发生的小错误
NULL 博文链接:https://king2009163-163-com.iteye.com/blog/657629
ibatis_SqlMapConfig配置详解
ibatis_SqlMapConfig配置详解,希望对初次接触ibatis的童鞋,有帮助
Spring对IBatis的整合
Spring对IBatis的整合 10.3 Spring对IBatis的支持 Spring对IBatis提供了完善的内建支持。使用Spring提供的IBatis辅助类,可以大大简化原有的IBatis访问代码。这些辅助类位于org.springframework.orm.ibatis包下,目前Spring可同时支持IBatis1.3.x和2.0。 此外,针对IBatis,Spring也提供了和JdbcTemplate一致的异常处理方式


Web 开发
