我正在使用EclipseLink。

我有一个JPQLquery,我想获取sql字符串。
现在,我这样做:

EJBQueryImpl qi = (EJBQueryImpl)jpqlQuery;
String sqlQueryString = qi.getDatabaseQuery().getSQLString();

问题在于,在sqlQueryString中,常量是否被替换为?

我试图获取导航表达式树的值(getSelectionCriteria()getHavingCriteria()),但是以此方式我松开了类型...

有没有人遇到过这样的问题?

最佳答案

引用自EclipseLink FAQ:

要查看JPA查询的SQL,您可以
启用FINE或更低版本的登录。

要获取特定查询的SQL,请访问
运行时可以使用DatabaseQuery
API。

Session session = em.unwrap(JpaEntityManager.class).getActiveSession();
DatabaseQuery databaseQuery = ((EJBQueryImpl)query).getDatabaseQuery();
databaseQuery.prepareCall(session, new DatabaseRecord());
String sqlString = databaseQuery.getSQLString();

此SQL将包含?对于
参数。转换SQL
与参数,你需要一个
带参数的DatabaseRecord
价值观。
Session session = em.unwrap(JpaEntityManager.class).getActiveSession();
DatabaseQuery databaseQuery = ((EJBQueryImpl)query).getDatabaseQuery();
String sqlString = databaseQuery.getTranslatedSQLString(session, recordWithValues);

08-25 01:39