Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从TypedQuery中查找本机SQL查询_Java_Mysql_Sql - Fatal编程技术网

Java 从TypedQuery中查找本机SQL查询

Java 从TypedQuery中查找本机SQL查询,java,mysql,sql,Java,Mysql,Sql,我需要知道在数据库上执行的是什么查询,以便检查是否可以改进它 以下代码用于创建查询: TypedQuery<OrderItem> orderItemTypedQuery = typedQuery.setParameter(OrderItemCriteria.CUSTOMER_ID_PARAM, criteria.getCustomerId()); String sqlQuery=orderItemTypedQuery.unwrap(org.hibernate.Query.class

我需要知道在数据库上执行的是什么查询,以便检查是否可以改进它

以下代码用于创建查询:

TypedQuery<OrderItem> orderItemTypedQuery = typedQuery.setParameter(OrderItemCriteria.CUSTOMER_ID_PARAM, criteria.getCustomerId());

String sqlQuery=orderItemTypedQuery.unwrap(org.hibernate.Query.class).getQueryString();
上面的查询不是本机的(未设置参数),我正在尝试查找数据库上正在执行的内容,以便检查查询是否缓慢,是否需要优化


谢谢

实现这一点的最佳方法是激活日志,这使我能够查看本机查询的外观。 这是通过设置以下属性来完成的

<prop key="hibernate.show_sql">true</prop>
true
如果我理解正确,这个参数是在不同的地方设置的,有些人在他们的日志属性中设置它(记住语法是不同的) 其他的在他们的配置中。
在我的例子中,这是在处理entityManager属性的xml配置文件中设置的。希望这有帮助

不幸的是,没有直接的方法可以做到这一点。虽然Hibernate最好包含一个简单的TypedQuery函数.getSql(),但它需要一些有趣的翻译。下面的代码适用于我

String hqlQueryString=typedQuery.unwrap(org.hibernate.query.Query.class).getQueryString();
        ASTQueryTranslatorFactory queryTranslatorFactory = new ASTQueryTranslatorFactory();
        SessionImplementor hibernateSession = entityManager.unwrap(SessionImplementor.class);
        QueryTranslator queryTranslator = queryTranslatorFactory.createQueryTranslator("", hqlQueryString, java.util.Collections.EMPTY_MAP, hibernateSession.getFactory(), null);
        queryTranslator.compile(java.util.Collections.EMPTY_MAP, false);
        String sqlQueryString = queryTranslator.getSQLString();

对于最新版本的Hibernate,您需要将类更改为org.Hibernate.query.query.class
String hqlQueryString=typedQuery.unwrap(org.hibernate.query.Query.class).getQueryString();
        ASTQueryTranslatorFactory queryTranslatorFactory = new ASTQueryTranslatorFactory();
        SessionImplementor hibernateSession = entityManager.unwrap(SessionImplementor.class);
        QueryTranslator queryTranslator = queryTranslatorFactory.createQueryTranslator("", hqlQueryString, java.util.Collections.EMPTY_MAP, hibernateSession.getFactory(), null);
        queryTranslator.compile(java.util.Collections.EMPTY_MAP, false);
        String sqlQueryString = queryTranslator.getSQLString();