2011-06-20 84 views
3

我正在使用EclipseLink。如何從JPQLQuery獲取SQL字符串

我有一個JPQLquery,我想要得到的SQL字符串.. 我現在做的是這樣的:

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

的問題是,在sqlQueryString不斷與更換?

我試圖讓導航表達式樹(getSelectionCriteria()getHavingCriteria()),但這種方式我失去的類型值...

做任何一件曾經有這樣一個問題?

+0

作爲後續行動的問題:我如何才能在SQL字符串時,我做了em.persist(pojoDbObject)? – OliBlogger

回答

1

EclipseLink FAQ引用:

要查看SQL的查詢JPA可以 啓用日誌記錄在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); 
+0

什麼是recordWithValues?是否有可能從DatabaseQuery或EJBQueryImpl獲取? – zmeda

+0

供將來參考:'recordWithValues'應該是'databaseQuery.getTranslationRow()'(源:https://dzone.com/articles/eclipselink-how-get-sql) –