簡體   English   中英

如何使用getTranslatedSQLString獲取Toplink生成的查詢?

[英]How can I get Toplink generated query by using getTranslatedSQLString?

因此,我正在做的是創建一個獲取ID值列表的子查詢,然后主查詢獲取所有必要的值並添加順序。

我所擁有的是:

ReportQuery querySub = new ReportQuery(Predmet.class, generatedExpression);
querySub.addAttribute("m_id");

DatabaseRow row = new DatabaseRow();
querySub.prepareCall(getSession(), row);

// This part is the problem
String sql = querySub.getTranslatedSQLString(getSession(), row);

此代碼的問題在於它不返回TranslatedSQLString,它返回的結果與querySub.getSQLString()相同。 現在,在我看到的所有示例代碼中,他們要么將行作為一個新對象實例化,要么就不麻煩從引用的位置開始寫,但是無論如何,這都不起作用(TopLink版本問題?)。 我猜我需要自己填充DatabaseRow對象,但是我找不到在線示例。

您需要像這樣的會話:

JpaHelper.getDatabaseSession(getEntityManager().getEntityManagerFactory());

您需要的數據庫是:

TypedQuery<T> typedQuery = getEntityManager().createQuery(cq);
DatabaseQuery databaseQuery = typedQuery.unwrap(JpaQuery.class).getDatabaseQuery();

所以最后一個例子是:

Session session = JpaHelper.getDatabaseSession(getEntityManager().getEntityManagerFactory());
DatabaseQuery databaseQuery = null;
if(typedQuery instanceof EJBQueryImpl)
    databaseQuery = ((EJBQueryImpl<T>)typedQuery).getDatabaseQuery();
else
    databaseQuery = typedQuery.unwrap(JpaQuery.class).getDatabaseQuery();
sql = databaseQuery.getTranslatedSQLString(session, databaseQuery.getTranslationRow());

那對我有用。

我沒有設法找到任何使用getTranslatedSQLString的方法。 我想需要填充DatabaseRow,但是我還沒有找到正確的方法。 現在,我使用“ bruteforce”替換,“存儲”所有參數,並對每個“?”進行查找/替換。 登錄查詢。

暫無
暫無

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

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