我正在执行以下HQL并且它正在执行
String hql = "FROM Employee";
Query query = session.createQuery(hql);
List results = query.list();
Run Code Online (Sandbox Code Playgroud)
现在我也想在日志中记录后端生成的sql以供支持用户使用,我想利用QueryTranslator请指教如何为相应的HQL生成sql请告知如何实现这一点.
你可以使用hibernate QueryTranslator:
String hqlQueryString = hqlQuery.getQueryString();
ASTQueryTranslatorFactory queryTranslatorFactory = new ASTQueryTranslatorFactory();
SessionImplementor hibernateSession = entityManager.unwrap(SessionImplementor.class);
QueryTranslator queryTranslator = queryTranslatorFactory.createQueryTranslator("", hqlQueryString, java.util.Collections.EMPTY_MAP, hibernateSession.getFactory());
queryTranslator.compile(java.util.Collections.EMPTY_MAP, false);
String sqlQueryString = queryTranslator.getSQLString();
Run Code Online (Sandbox Code Playgroud)
我相信你想要前两个答案的组合
String hqlQueryString = query.unwrap(org.hibernate.Query.class).getQueryString();
ASTQueryTranslatorFactory queryTranslatorFactory = new ASTQueryTranslatorFactory();
SessionImplementor hibernateSession = em.unwrap(SessionImplementor.class);
QueryTranslator queryTranslator = queryTranslatorFactory.createQueryTranslator("", hqlQueryString, java.util.Collections.EMPTY_MAP, hibernateSession.getFactory());
queryTranslator.compile(java.util.Collections.EMPTY_MAP, false);
String sqlQueryString = queryTranslator.getSQLString();
Run Code Online (Sandbox Code Playgroud)
Ash*_*ral -3
您可以使用 unwrap 方法取出查询。
String queryString = query.unwrap(org.hibernate.Query.class).getQueryString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24740 次 |
| 最近记录: |