有些时候,hibernate session.query()或者find没法执行一些原生的DB的一些函数或者特点或者无法执行子查询,或者要使用数据库的某些特性的时候(比如说在查询提示或者Oracle中的
CONNECT关键字),
一般都会搭配jdbc来做,但是这样的话,总感觉不是特别好,不用spring的话,还得注意这个额外开的数据库连接的管理问题,hibernate提供了native sql查询这种方式,这就能够扫清你把原来直接使用SQL/JDBC 的程序迁移到基于 Hibernate应用的道路上的障碍。Hibernate3允许你使用手写的sql来完成所有的create,update,delete,和load操作(包括存储过程)
做法只要在
映射文档中定义查询的名字,然后就可以象调用一个命名的HQL查询一样直接调用命名SQL查询
调用方法是
经常做sql的人因该经常碰到hql或者一些sql在DB工具里面能执行,但是hibernate执行就报错的问题吧,上面就能在不用jdbc的情况下搞定,做个小结,呵呵
一般都会搭配jdbc来做,但是这样的话,总感觉不是特别好,不用spring的话,还得注意这个额外开的数据库连接的管理问题,hibernate提供了native sql查询这种方式,这就能够扫清你把原来直接使用SQL/JDBC 的程序迁移到基于 Hibernate应用的道路上的障碍。Hibernate3允许你使用手写的sql来完成所有的create,update,delete,和load操作(包括存储过程)
做法只要在
映射文档中定义查询的名字,然后就可以象调用一个命名的HQL查询一样直接调用命名SQL查询
- <sql-query name="queryProductLineForExist">
- <return-scalar column="ProductLine" type="string"/>
- Select 'exist' as exist from tableName a
- where 1=1
- and productline = :productline
- and to_date(a.yyyymm,'yyyymm') >= add_months(to_date((select max(b.yyyymm) from tableName b), 'yyyymm'), -2)
- </sql-query>
- Session session = this.getSession();
- Query query = session.getNamedQuery("queryProductLineForExist");
- list = query.list();
- return list;
经常做sql的人因该经常碰到hql或者一些sql在DB工具里面能执行,但是hibernate执行就报错的问题吧,上面就能在不用jdbc的情况下搞定,做个小结,呵呵