我有一句SQL,ORACLE数据库,SQL绝对执行正确。。 select t.*,d.class_amount, d.subject_amount from classroom t, ( select fk_classroom,count(*) as ct from examination_room_plan c where c.fk_number_showings = '402881280f8e8d39010f907ef2b7037c' group by c.fk_classroom ) a, examination_room_plan_rule d where (d.subject_amount - nvl(a.ct,0)) > 0 and t.pk = a.fk_classroom(+) and t.seat_amount >= d.seat_range_begin and t.seat_amount <= d.seat_range_end 用HQL怎么写?我搞了很久都没有搞定,,高手解决一下, 其中用的表我都有POJO类 classroom Classroom examination_room_plan ExaminationRoomPlan examination_room_plan_rule ExaminationRoomPlanRule |
2 | #1 得分:0 回复于: 2006-12-20 08:26:12 没有一个人进来看看 ,,你们在做系统的时候,,都是单表查询吗? 稍微复杂点的SQL都没有吗? |
|
2 | #2 得分:0 回复于: 2006-12-20 13:02:40 自己再顶下。。。顶到不能顶,顶到高手到。。。 |
|
| #3 得分:4 回复于: 2006-12-20 13:07:30 如果不能有hql觖决,不是可以session.createSQLQuery(sql),来对sql语句直接的操作吗 |
|
| #4 得分:2 回复于: 2006-12-20 13:29:47 up 关注 |
2 | #5 得分:0 回复于: 2006-12-20 14:30:56 session.createSQLQuery(sql) 这个写法,必须有一个实体类去实例化数据结果,然而还需要一个hbm.xml文件,,我只想返回我需要的组合字段,以一个Object[]形式就行了。。 而我的结果是几个表的数据字段。。createSQLQuery这种方法试过了,如果这个查询结果和我数据库的表一样,那么可以,。。 |
| #6 得分:2 回复于: 2006-12-20 20:50:47 顶一下,但是SPRING实在不是很会 |
| #7 得分:2 回复于: 2006-12-20 21:02:26 up |
| #8 得分:5 回复于: 2006-12-20 23:35:09 用面向对象的技术来实现面向过程的需求,是很难一步到位的。 HQL跟SQL不是一回事。 |
| #9 得分:5 回复于: 2006-12-22 21:17:20 分段查出来试试~ |
| #10 得分:30 回复于: 2006-12-22 22:27:06 其实对于复杂SQL建议你还是不要用HQL,你可以使用Session.getNamedQuery(queryName)的方法,然后在hbm.xml文件写上的SQL,并把返回的列名对应pojo的属性进行Mapping就可以了。Hibernate可以对Table进行Mapping,也可以只对返回的字段进行Mapping。如果你不想写hbm.xml文件,可以用Hibernate的Annotation进行Mapping,用Annotation对返回字段的Mapping会更加方便。 |
| #11 得分:30 回复于: 2006-12-23 16:22:22 对于复杂的SQL还是不要用HQL转了,如果你只是想要一些结果,可以考虑把sql写在hbm.xml的properties中的formula里。 formula (optional): an SQL expression that defines the value for a computed property. Computed properties do not have a column mapping of their own. |
| #12 得分:0 回复于: 2006-12-23 16:23:00 不好意思,是propertiy的formula |
| #13 得分:20 回复于: 2006-12-23 23:11:18 首先,hibernate用createSQLQuery查询时是可以返回数组的. 再者,对于过于复杂的查询语句,可考虑建view,hibernate3.x是支持view的 |
联系客服