我可以知道如何從JPA查詢獲取sql嗎?或者說,將JPA查詢轉換爲SQL字符串?非常感謝你!我可以從JPA查詢對象獲取SQL字符串嗎?
回答
如果你只是想知道你的JPQL或條件查詢如何被翻譯成你的數據庫的SQL方言,你可以啓用持久性XML細粒度的日誌記錄,然後看看你的日誌文件。
屬性名稱和值取決於您的JPA實現。這裏是的persistence.xml爲EclipseLink的相關部分的一個例子:
<properties>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
您可能感興趣的是,如果有一種方法可以從javax.persistence.Query中提取JPQL字符串(包含params的佔位符或params填充後的最終JPQL)(可能的子類之一是更精確), - 在這種情況下根據JPA規範合同是不可能的。然而,假設這可能是通過JPA實現的(例如,NamedQueryImpl可能具有#toJPQLString(),您可以通過投射來訪問它),但是我對此抱有懷疑。 即使有可能我不認爲這是一個很好的代碼來執行這樣的操作。我會建議找到另一個設計解決方案(並且你可以指定你有什麼樣的實際問題)。例如,如果您要動態構建查詢,則可以使用JPA Criteria API,並且可以使用「構建」JPA查詢來維護反映查詢邏輯的內部數據結構。
除了能夠像@馬特方便的日誌中提到,也可以得到與在運行時的EclipseLink特定查詢的SQL字符串如here所述。
使用Hibernate作爲供應商,您可以啓用以下屬性:
hibernate.show_sql
所有SQL語句到控制檯。這是設置日誌類別org.hibernate.SQL進行調試的替代方法。 (例如true | false)
hibernate.format_sql
漂亮地打印日誌和控制檯中的SQL。 (例如:true |假)
或者,你上面的說明可以啓用日誌記錄到調試級別爲記錄器
org.hibernate.SQL
日誌中的所有SQL DML語句執行時爲它們
對於的EclipseLink:您可以提取SQL方式如下:
query.unwrap(EJBQueryImpl.class).getDatabaseQuery().getSQLString()
僅當在之後查詢已執行。
爲我工作,但我的項目沒有EJBQueryImpl.class(我用String rtn = query.unwrap(org.hibernate.Query.class).getQueryString();) – John 2016-10-26 14:22:39
繼卡羅爾的答案 - 這是可能的EclipseLink的執行語句之前檢索SQL:
Session session = em.unwrap(JpaEntityManager.class).getActiveSession();
DatabaseQuery databaseQuery = query.unwrap(EJBQueryImpl.class).getDatabaseQuery();
databaseQuery.prepareCall(session, new DatabaseRecord());
Record r = databaseQuery.getTranslationRow();
String bound = databaseQuery.getTranslatedSQLString(session, r);
String sqlString = databaseQuery.getSQLString();
要檢索的SQL字符串在/執行後,它可能是最好的,而不是這樣做的使用持久性代碼:
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.logging.level" value="FINE"/>
- 1. 我可以從sqlite查詢字符串中獲取表名嗎?
- 2. 如何從solr查詢字符串中獲取查詢對象
- 3. 我可以使用String.format構建Sql查詢字符串嗎
- 4. 我可以從LINQ對象內執行LINQ to SQL查詢嗎?
- 5. 我可以從字符串表達式運行LINQ查詢嗎?
- 6. MySQL查詢字符串SQL對象
- 7. 從查詢字符串獲取Json對象c#
- 8. ASP.NET MVC - 從查詢字符串獲取對象列表
- 9. 我可以從Dapper查詢獲取字段結構嗎?
- 10. 是否可以從XPathExpression獲取XPATH查詢字符串?
- 11. 從可能相對的URL獲取查詢字符串
- 12. 我可以從對象獲取固定對象的GCHandles嗎?
- 13. 我可以在JPA本機SQL查詢中檢索列名嗎?
- 14. 從Javascript獲取查詢字符串值
- 15. 從查詢字符串獲取變量
- 16. 從查詢字符串獲取數據
- 17. 從URLReferrer獲取查詢字符串
- 18. 從字符串獲取對象值
- 19. 從對象獲取字符串
- 20. 從對象中獲取字符串
- 21. 從字符串獲取NSDate對象
- 22. 我可以使用ExpressJS遍歷查詢字符串參數嗎?
- 23. 我可以使用子查詢連接字符串嗎?
- 24. 我可以使用RewriteRule重定向到查詢字符串嗎?
- 25. 是否有可能從查詢字符串中獲取字典?
- 26. 如何獲取ID列表的所有JPA對象,或者如何從此SQL查詢中創建JPA查詢?
- 27. 如何通過查詢字符串獲取JSON對象
- 28. 從RouteValueDictionary對象創建一個字符串/查詢字符串對象
- 29. Javascript - 從字符串中獲取查詢字符串?
- 30. JPA:我可以使用@Column(precision =)作爲字符串值嗎?
你能更清楚地瞭解你想要的東西嗎?即請發佈「JPA查詢」(標準查詢?JPQL?),並且可能是您期望的輸出類型的示例。另請告訴我們,您使用的JPA實現(OpenJPA,Hibernate等) – 2011-06-08 09:23:32
對於hibernate實現:query.unwrap(org.hibernate.Query.class).getQueryString()。 – 2017-09-13 06:10:13