[英]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.