hql 转化为 sql ,满足仅仅用hibernate无法实现的sql构建

如下方法能将hql转换为sql,便于在系统总体是用hibernate查询的情况下,加入一些特殊查询条件的sql语句,满足仅仅用hibernate无法实现的sql构建。

protected String hqlToSql(String hql,
   org.hibernate.SessionFactory sessionFactory) throws Exception {
  org.hibernate.hql.ast.QueryTranslatorImpl queryTranslator = new org.hibernate.hql.ast.QueryTranslatorImpl(
    hql, hql, java.util.Collections.EMPTY_MAP,
    (org.hibernate.engine.SessionFactoryImplementor) sessionFactory);

queryTranslator.compile(java.util.Collections.EMPTY_MAP, false);

return queryTranslator.getSQLString();
 }

时间: 2024-10-07 03:59:57

hql 转化为 sql ,满足仅仅用hibernate无法实现的sql构建的相关文章

Hibernate 使用原生 Native SQL

零.  前言 简单的查询一般都使用 HQL , 开发效率会比较高, 但是复杂的查询如果前期用 HQL , 那么后期出现慢查询, 就不得不用 原生 SQL 重写一遍, 要是滥用 HQL 返回各种对象, 用对象到处操作, 最后的慢查询调优简直就是条不归路. 笔者最近在做一个 10 年老项目的慢查询调优, 深有感悟, 本文只介绍 Hibernate 如何使用原生 SQL, 调优工作请看笔者其他文章. 一.  代码示例 使用原生 SQL 的工具类: public SQLQuery findQueryBy

Hibernate SQL实际sql语句监控- p6spy+hibernate+proxool 设置

由于ORM工具的缘故,我们调试程序的时候远没有直接在程序里直接写个string的SQL简单,想当年查个sql是有多么的幸福,一行sql = "select * from ..."找找就行了, 现在用了hibernate, 就算在JPA中开了show_sql=true, 打出来的还是一串 "name = ? and id = ? " 好在找到一个工具, p6spy, 作为真正JDBC的一个代理, 截获了所有sql, 让我们看到一个真实sql的机会. 先下载,以下配置默

关于hibernate的session.createSQLQuery(sql)直接调用底层SQL后,返回结果集的问题

数据库中有如下信息name,sex张三.男李四.女通过Hibernate的  createSQLQuery 可以直接调用底层SQL语句如下:List list = (List)getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException,SQLException { Query query = sessio

java数据类型,hibernate数据类型,标准sql数据类型之间的对应表

Hibernate API简介 其接口分为以下几类: l         提供访问数据库的操作的接口: l         用于配置Hibernate的接口: l         回调接口 l         扩展Hibernate的功能的接口. 这些接口大多数位于net.sf.hibernate包中 Hibernate的核心接口 5个核心接口: l         Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象. l   

Access SQL Azure with JDBC/Hibernate

前篇文章介绍了如何将Tomcat及Web应用程序部署到Windows Azure,凡事只要起了头,接下来的工作就相对简单许多,本篇文章接续前篇,介绍如何透过JDBC来存取SQL Azure. Access SQL Azure with JDBC/Hibernate 文/黄忠成 Using JDBC with SQL Azure ? 前篇文章介绍了如何将Tomcat及Web应用程序部署到Windows Azure,凡事只要起了头,接下来的工作就相对简单许多,本篇文章接续前篇,介绍如何透过JDBC来

Hibernate通过自编写sql查询

public List<InterProductMsg> selectIsHaveProductid(String productId) { String sql="SELECT * FROM INTER_PRODUCT_MSG A WHERE A.PRODUCTID=? "; // sql查询 SQLQuery sq = this.getCurrentSession().createSQLQuery(sql).addEntity(InterProductMsg.class

SQL Server Extended Events 进阶 1:从SQL Trace 到Extended Events

http://www.sqlservercentral.com/articles/Stairway+Series/134869/ SQL server 2008 中引入了Extended Events 用以替换SQL Trace. 然而在第一个版本中并没有为用户提供UI,因此使用Extended Events并不是很方便.SQL Server 2012及时修正了这一点,将UI管理工具集成在SSMS中, 这就意味着我们不需要再为了查询Event XML而学习使用XQuery了.因此跟多的DBA和开

atitit..sql update语法的词法分析,与语法ast构建

atitit..sql update语法的词法分析,与语法ast构建 1. 要使用sql udpate语法的dsl ,需要写个解释器.. 1 2. 词法分析的实现 1 2.1. 扫描器的实现 SqlUpExpTokener 1 2.2. 等号操作符的转态 EqxState 2 2.3. 单引号的转态 SingleQuoeState 3 2.4. 逗号操作的转态 CommaState 5 3. 构建语法树ast 6 4. 最终输出ast结构 8 1. 要使用sql udpate语法的dsl ,需要

java mybatis学习之$和#区别,mapper代理接口,动态SQL,在日志中输出mybatis的sql语句

1.在mybatis中,$和#的区别: #{}:表示一个预处理参数,参数类型不定,是根据传入的参数类型来设定的.类似于JDBC中的? 特例使用,模糊查询:(针对oracle): and username like concat(concat('%',#{username}),'%') ${}:相当于是我们的JDBC里的字符串拼接.这里就相当于传入的就是一个字符串(不管传入什么样的数据类型,都是字符串) and username like '%${value}%' 2.$和#在mybatis中的优