我们的应用程序根据提供的过滤器动态构建hql查询。现在我有一个用例,我需要将生成的hql转换为sql并将其提供给jasper报告以生成报告。这是我到目前为止所能做到的:
将hql翻译为sql:
private String toSql(String hql){
QueryTranslatorFactory translatorFactory = new ASTQueryTranslatorFactory();
Session session = this.es.getEntityManager().unwrap(Session.class);
SessionFactoryImplementor sessionFactoryImplementor = (SessionFactoryImplementor)session.getSessionFactory();
Map<String,Filter> filters = getEnabledFilters(session);
QueryTranslator translator = translatorFactory.createQueryTranslator(hql,hql,filters,sessionFactoryImplementor,null);
translator.compile(Collections.EMPTY_MAP,false);
return translator.getSQLString();
}
以下是我从上述方法获得的一个例子:
select person from Person person where person.id in (?);
有没有办法可以“?”绑定到实际值?示例:(20,30)和查询应如下所示:
select person from Person person where person.id in (20,30);
注意::我也在会话中启用了过滤器,我也需要能够绑定这些值。