使用hibernate调用存储过程(当返回结果不是具体对应的实体时)
在java中,可以直接用jdbc调用存储过程,但是,如果项目中使用到了hibernate,那么我倾向使用hibernate来调用存储过程,使用jdbc或jdbcTemplate调用存储过程,代码实在太臃肿难看了。 网上查了很多资料,全是千篇一律,你抄我,我抄你,都是在调用存储过程时,还要具体的映射一个实体对象和一张表,
如:
如上例一样,我就纳闷了,这样的存储过程的调用,有多少意义,大多情况下,存储过程返回的结果集是复杂的结构,根本不是一张表对应的结构,可能在存储过程中操作了很多很多个表,包括N个临时表,此时,你让我对应哪个实体去?
但是自己尝试,原来是可以不对应实体的,即把sql-query 标签中的return模块直接去掉即可,如:
那么,上例可以改成如下:
这样就可以不必要对应具体的实体对象和表了,可以做任意复杂的查询了,不过,这种情况下返回的是数组列表,
即List<Object[]> 格式的对象。