我正在使用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);