[英]How to convert hql to sql and apply filters on it?
我调用此方法将hql查询转换为sql:
public String toSql(String hqlQueryText) {
if (hqlQueryText != null && hqlQueryText.trim().length() > 0) {
QueryTranslatorFactory translatorFactory = new ASTQueryTranslatorFactory();
SessionFactoryImplementor factory = (SessionFactoryImplementor) sessionFactory;
QueryTranslator translator = translatorFactory.createQueryTranslator(hqlQueryText, hqlQueryText, Collections.EMPTY_MAP, factory, null);
translator.compile(Collections.EMPTY_MAP, false);
return translator.getSQLString();
}
return null;
}
我在域类的.hbm.xml
文件中有此过滤器:
<filter name="userAuthorize" condition="some sql query here" />
但是我不知道在从hql转换为sql时应该如何告诉hibernate应用此过滤器。
假设我像这样调用上面的方法:
public Session getSession() {
try {
return sessionFactory.getCurrentSession();
}
catch (Exception e) {
}
return sessionFactory.openSession();
}
public List<DomainClass> getAll() {
String hql = " some hql query ";
Session session = getSession();
String sql = toSql(hql);
return session.createSQLQuery(sql).list();
}
这不是一个好主意。 但也许有帮助。
HQL和SQL有一些区别,例如,在join中,SQL中使用“ on”,在HQL中使用“ with”。 因此,也许您可以使用HQL特有的单词列表,然后使用
hql.contains(“ with”)或hql.indexOf(“ with”)。
QueryTranslator不负责应用过滤器。 此外,过滤器不会应用于本机SQL。
看来您只想执行HQL查询? 无需先将其转换为SQL:
public List<DomainClass> getAll() {
String hql = " some hql query ";
return session.createQuery(hql).list();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.