获得Hibernate Criteria实际SQL的方法
程序员文章站
2022-04-15 22:06:41
...
对于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();
}
推荐阅读
-
sql server获得新记录标识列值的二种方法
-
Hibernate通过SQL查询常量时只返回第一个字符问题的解决方法
-
sql server获得新记录标识列值的二种方法
-
hibernate使用HibernateCallback回调的方法查询SQL时couldnotexecutequery--作怪的别名
-
Hibernate通过SQL查询常量时只返回第一个字符问题的解决方法
-
SQL2008无法附加数据库,提示“无法显示请求的对话框”(nColIndex实际值是-1)图文解决方法
-
hibernate使用HibernateCallback回调的方法查询SQL时couldnotexecutequery--作怪的别名
-
Hibernate的第五节(组件映射、继承映射、HQL查询、Criteria查询、本地的SQL查询)
-
怎样利用Hibernate来防止SQL注入的方法
-
获得Hibernate Criteria实际SQL的方法