簡體   English   中英

如何獲取命名查詢的jpql?

[英]How to get jpql of named query?

假設存在以下定義:

@Entity
@NamedQueries({
    @NamedQuery(name = "name1", query = "SELECT n FROM SomeEntity n where n.name= :name"),
    @NamedQuery(name = "name2", query = "SELECT n FROM SomeEntity n where n.name <> :name")
})
public class SomeEntity ......

如何以編程方式獲取命名查詢的定義?

例如,下面的代碼段應打印name1查詢的定義,但我不知道如何在代碼中獲取此定義:

String queryString = ????????.getSqlOfNamedQuery("name1");
// the below line should print: SELECT n FROM SomeEntity n where n.name= :name
System.out.println( queryString ); 

您可以使用unwrap方法,並為其提供特定於供應商的類。 我在DZone的一篇舊文章中看到了這一點。 我已經測試了EclipseLink版本,它對我有用:

Query query = entityManager.createQuery("....");

對於EclipseLink:

String sqlString = query.unwrap(JpaQuery.class).getDatabaseQuery().getSQLString();

對於休眠:

String sqlString = query.unwrap(org.hibernate.Query.class).getQueryString();

您也可以檢查數據庫日志(即/var/log/postgres/postgres.log ),但是您可能還有其他要求,需要采用編程方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM