我需要知道数据库上正在执行什么查询,以便检查是否可以改进它。
以下代码用于创建查询:
TypedQuery<OrderItem> orderItemTypedQuery = typedQuery.setParameter(OrderItemCriteria.CUSTOMER_ID_PARAM, criteria.getCustomerId());
String sqlQuery=orderItemTypedQuery.unwrap(org.hibernate.Query.class).getQueryString();
显示以下查询:
select generatedAlias0 from OrderItem as generatedAlias0 left join generatedAlias0.order as generatedAlias1 where ( generatedAlias0.status in (:param0) ) and ( generatedAlias0.hidden=:param1 ) and ( generatedAlias0.customer.id=:param2 ) and ( generatedAlias0.linkedOrderItem is null ) order by generatedAlias1.id desc, generatedAlias0.id desc
上面的查询不是本机的(未设置参数),我试图找到数据库上正在执行的内容,以便我可以检查查询是否很慢并且需要优化。
Thanks
不幸的是,没有直接的方法可以做到这一点。虽然 Hibernate 包含 .getSql() 的 TypedQuery 的简单函数会非常好,但它需要一些有趣的翻译。下面的代码对我有用。
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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)