跪求:请各位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>
请各位高人指点这是为什么?实在搞不明白了!
万分感谢各位了!