繁体   English   中英

如何将hql转换为sql并对其应用过滤器?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM