`
Relucent
  • 浏览: 209484 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

获得Hibernate Criteria实际SQL的方法

 
阅读更多

对于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();
}

 

 

0
0
分享到:
评论
3 楼 Relucent 2015-05-14  
likaiyihou51 写道
The constructor CriteriaJoinWalker(OuterJoinLoadable, CriteriaQueryTranslator, SessionFactoryImplementor, Criteria, String, Map) is undefined

这个错误是怎么回事


这个是Hibernate3.2的版本,新的Hibernate版本方法可能变了,所以这个可能不适用。
如果是调试的话继续用p6spy吧
2 楼 likaiyihou51 2014-12-30  
The constructor CriteriaJoinWalker(OuterJoinLoadable, CriteriaQueryTranslator, SessionFactoryImplementor, Criteria, String, Map) is undefined

这个错误是怎么回事
1 楼 likaiyihou51 2014-12-30  
大侠 我copy了这个代码 又个问题,能给看一下吗

相关推荐

    Hibernate中,利用Criteria查询容器实现sql的写法

    本篇将详细讲解如何在Hibernate中利用Criteria查询来实现类似SQL的查询操作,并探讨其在实际开发中的应用。 Criteria查询是Hibernate提供的一种灵活的查询方式,它可以让我们根据业务需求动态地构建查询条件。这种...

    hibernate实现动态SQL查询

    为了实现动态SQL,我们可以借助于Hibernate的QBC(Query By Criteria)和Criteria API,或者使用第三方库如MyBatis的动态SQL功能。本文主要讨论使用XML配置和FREEMARKER的方法。 四、XML配置SQL 在Hibernate中,...

    hibernateCriteria查询

    查询条件是通过`org.hibernate.criterion.Restrictions` 类来定义的,这个类提供了许多静态方法来模拟SQL语句中的条件,例如`eq` (等于)、`gt` (大于)、`in` (包含在列表中)等。 #### 三、简单Criteria查询示例 ...

    Hibernate criteria基本操作

    Hibernate Criteria 是一种在Java应用程序中使用Hibernate ORM框架执行SQL查询的方式。它提供了一种面向对象的方式来构建查询,使得代码更加可读和易于维护。Criteria API 提供了多种方法来构建复杂的查询,包括添加...

    hibernate criteria的使用方法

    ### Hibernate Criteria 使用方法详解 #### 一、简介 Hibernate 是一款非常流行的 Java 持久层框架,它简化了对象关系映射(ORM)过程中的许多复杂性。在 Hibernate 中,Criteria API 提供了一种类型安全的方式来...

    hibernate 执行原生sql的几种方式

    虽然`Criteria API`主要是为了使用Hibernate的ORM功能,但也可以通过`Projections.sqlProjection()`执行原生SQL投影,从而创建自定义的查询。 ```java Criteria criteria = session.createCriteria(User.class); ...

    Struts 1.1、Hibernate 3.0和SQL Server 2005数据库驱动包

    Struts 1.1、Hibernate 3.0 和 SQL Server 2005 数据库驱动包是构建基于Java的企业级Web应用程序的关键组件。这些技术在2000年代中期广泛应用于开发面向服务架构(SOA)和模型视图控制器(MVC)模式的系统。 Struts...

    Hibernate的Criteria用法总结

    在Java持久层框架Hibernate中,Criteria API是一种动态构建SQL查询的方法,它允许开发者在运行时构建查询,提供了更面向对象的查询方式。本篇将详细阐述Hibernate Criteria API的使用。 首先,Criteria API由...

    Criteria hibernate

    本篇内容将聚焦于Hibernate中的Criteria查询,这是一种动态构建SQL查询的方法,无需直接编写SQL语句,非常适合在程序运行时根据条件构建查询。 在Hibernate中,Criteria API提供了一种类型安全的方式来执行查询,它...

    Hibernate Criteria 完全使用

    Hibernate Criteria API 是 Hibernate 框架中一个强大的查询工具,它提供了一种面向对象的方式来构建SQL查询,使得开发者无需直接编写SQL语句,即可进行复杂的数据库操作。Criteria API 提供了高度抽象的接口,可以...

    Hibernate生产SQL语句

    Hibernate的核心在于它的Query API,它提供了Criteria、HQL(Hibernate Query Language)和JPQL(Java Persistence Query Language)等方式来构建SQL语句。Hibernate会根据这些查询语句动态生成对应的SQL,并执行在...

    Hibernate中的查询:HQL、Criteria、原生SQl

    本篇文章将深入探讨Hibernate中的三种主要查询方式:HQL(Hibernate Query Language)、Criteria API以及原生SQL。 一、HQL(Hibernate Query Language) HQL是Hibernate提供的一种面向对象的查询语言,它类似于SQL...

    Hibernate的Criteria用法总结.doc

    Hibernate 的 Criteria 是一个完全面向对象、可扩展的条件查询 API,通过它完全不需要考虑数据库底层如何实现、SQL 语句如何实现。Criteria 提供了灵活的查询条件组装方式,能够满足开发中复杂的查询需求。 一、...

    Hibernate Criteria用法大全.docx

    通过Criteria API,开发者可以构建复杂的查询条件,无需直接编写SQL,使得代码更加易于理解和维护。 1. **标准查询简介(QBC:Query By Criteria)** Criteria API 的核心在于`Criteria`对象,它是通过`Session`的...

    Hibernate中Criteria的完整用法

    Hibernate中的Criteria API是一种用于执行动态查询的机制,它允许开发者在运行时构建SQL查询,而无需直接编写SQL语句。Criteria API提供了更加面向对象的方式来处理数据库查询,这使得代码更易于理解和维护,尤其是...

    Hibernate+sqlserver2000分页

    本篇文章将深入探讨使用Hibernate ORM框架与SQL Server 2000数据库进行分页查询的方法。 首先,Hibernate是Java领域中最流行的ORM(对象关系映射)框架之一,它允许开发者使用面向对象的方式操作数据库,减少了直接...

    Hibernate之原生Native SQL查询

    然而,尽管Hibernate提供了强大的HQL(Hibernate Query Language)和Criteria API,但在处理某些特定的、复杂的SQL查询时,可能无法满足需求,这时就需要用到“原生的Native SQL查询”。 Native SQL查询允许我们...

    Hibernate调用配置文件中的sql语句

    在传统的Hibernate应用中,我们通常使用HQL(Hibernate Query Language)或者Criteria API来执行查询。然而,有时候我们可能需要执行更复杂的自定义SQL,这时就需要在配置文件中引入SQL语句。以下是一些关键步骤: ...

    Hibernate-Criteria 模糊查询

    `Criteria`是Hibernate提供的一个用于执行查询的标准API,它基于对象模型而不是SQL语句来构建查询,这使得开发人员能够以面向对象的方式进行数据库操作,避免了直接编写SQL带来的复杂性和潜在错误。通过`Criteria`,...

    hibernateCriteria的使用.docx

    在Java的持久化框架Hibernate中,Criteria API是一种用于构建动态查询的强大工具,它允许开发者以编程方式构建查询,而不是直接写SQL语句。下面将详细解释Criteria API的使用及其相关概念。 1. Query By Example ...

Global site tag (gtag.js) - Google Analytics