对于Hibernate QBC查询,有时候我们会遇到需要获得最终SQL的需求,但是Hibernate本身并没有提供该方法。
虽然我们可以使用诸如p6spy之类的第三方组件来输出实际SQL日志,但是那是通过拦截dataSource-SQL实现的。我们仍然无法在程序内部获得最终实际的SQL代码。
那么如何在程序中获得SQL呢。其实有一个方法,那就是模拟一遍Hibernate中Criteria生成SQL的全部过程。
此处提供一个方法,用于通过criteria获取实际SQL:
public static String getCriteriaSql(Criteria criteria) {
CriteriaImpl criteriaImpl = (CriteriaImpl) criteria;//转型
SessionImplementor session = criteriaImpl.getSession();//获取SESSION
SessionFactoryImplementor factory = session.getFactory();//获取FACTORY
CriteriaQueryTranslator translator = new CriteriaQueryTranslator(factory, criteriaImpl, criteriaImpl
.getEntityOrClassName(), CriteriaQueryTranslator.ROOT_SQL_ALIAS);
String[] implementors = factory.getImplementors(criteriaImpl.getEntityOrClassName());
CriteriaJoinWalker walker = new CriteriaJoinWalker((OuterJoinLoadable) factory
.getEntityPersister(implementors[0]), translator, factory, criteriaImpl, criteriaImpl
.getEntityOrClassName(), session.getEnabledFilters());
return walker.getSQLString();
}
分享到:
相关推荐
Criteria查询将数据查询条件封装成为一个对象,可以堪称是传统SQL的对象化表示。
NULL 博文链接:https://beisicao.iteye.com/blog/955674
Hibernate中的查询:HQL、Criteria、原生SQl的Demo,希望可以帮助大家理解Hibernate查询。
本文旨在为读者呈现不同的方式查询方式:HQL方式的查询、SQL原生态SQL方式的查询、以及Criteria方式的查询,拓展查询的不同实现思路,开阔视野、并涵盖了部分的Hibernate增删改的基本操作。
Hibernate中Criteria的完整用法 Criteria 是一个完全面向对象,可扩展的条件查询API,通过它完全不需要考虑数据库底层如何实现、SQL语句如何...
Hibernate在Myeclipse下SQL语句演示,包含有HQL and Criteria语句的编写测试。
使用Hibernate時,即使您不了解SQL的使用與撰寫,也可以使用它所提供的API來進行SQL語句查詢,org.hibernate.Criteria對SQL進行封裝,您可以從Java物件的觀點來組合各種查詢條件,由Hibernate自動為您產生SQL語句,...
MockDatabase-开发 一个模拟数据库,用于对Hibernate Criteria,Query和SQLQuery进行单元测试。
持续更新ing Hibernate 开发学习手册 Hibernate 基本介绍 Hibernate 之 SQL、 HQL查询 Hibernate 之 Criteria 查询 Hibernate 整合 C3P0 连接池
Hibernate常用操作示例,包含详细注释说明,数据库初始化文件。使用和学习请参考:http://blog.csdn.net/daijin888888/article/details/51692942
这份代码,主要演示了hibernate的各种查询方式。包括query,criteria,sql等
Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务...
Hibernate中使用Criteria Query各种QBC查询
3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. 别名注射(alias injection names) 19.1. ...
3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. 别名注射(alias injection names) 19.1. ...
3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. 别名注射(alias injection names) 19.1. ...
我尝试着模仿hibernate的criteria构建这么一个轻量级查询框架,提供一下特点: 1 可以根据前台传过来的查询数据自动构建查询条件 2 可以生成纯SQl 3 也可以直接使用preparestatement进行查询,返回我们想要的数据。 ...
实现一个默认的构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 建议使用不是final的类 (可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和hashCode...
hibernate 学习资料 Session接口 Query和Criteria接口 Hibernate主键介绍 二级缓存的管理