我如何通过使用getTranslatedSQLString获得Toplink生成的查询



所以我要做的是创建一个获取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对象,但我在网上找不到任何例子。

我没有设法通过使用getTranslatedSQLString找到任何方法来做到这一点。我想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());

相关内容

  • 没有找到相关文章

最新更新