Как я могу получить сгенерированный Toplink запрос с помощью getTranslatedSQLString? - PullRequest
0 голосов
/ 05 октября 2011

Итак, я создаю подзапрос, который получает список значений идентификатора, затем основной запрос получает все необходимые значения и добавляет порядок.

Что у меня есть это:

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 самостоятельно, но я не могу найти ни одного примера в Интернете.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2015

вам нужен сеанс, подобный следующему:

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());

Это работа для меня.

0 голосов
/ 10 октября 2011

Мне не удалось найти какой-либо способ сделать это с помощью getTranslatedSQLString. Я предполагаю, что DatabaseRow должен быть заполнен, но мне еще предстоит найти правильный путь. На данный момент я использую замену "bruteforce", я "запоминаю" все свои параметры и выполняю поиск / замену для каждого "?" войдите в запрос.

...