2016-11-23 6 views
0

私はSQLにHQLクエリを変換するために、このメソッドを呼び出します。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(); 
} 

答えて

0

ない素晴らしいアイデア:

は、私はこのようなメソッドの上に呼び出すことを想定します。しかし多分それは役に立ちます。

HQLとSQLにはいくつかの違いがあります。たとえば、joinでは 'on'がSQLで使用され、 'with'はHQLで使用されます。 HQLに固有の単語のリストを使用し、

hql.contains( "with")またはhql.indexOf( "with")を使用して文字列内でそれらをチェックすることができます。

1

フィルタを適用するのはQueryTranslatorの責任ではありません。また、フィルタはネイティブSQLに適用されません。

HQLクエリを実行したいだけですか?

public List<DomainClass> getAll() { 
    String hql = " some hql query "; 
    return session.createQuery(hql).list(); 
} 
+0

私は簡単なhqlクエリを実行したくない、私はすぐに私の問題を簡単に説明するために書いた。 hqlをsqlに変換するときにフィルタを適用する方法はありません.QueryTranslatorの代わりにすべてのものを使用できますか? –

+1

こんにちはRasool、あなたの質問は "Hibernate QueryTranslatorはフィルタを適用しません"というタイトルです。私はあなたに正しい答えを与えました。それは設計によるものではありません。別の質問がある場合は、それを受け入れて新しい質問を作成する必要があります。ありがとう! – Sanne

+0

あなたの努力のおかげで、私は質問のタイトルを変更しました。この問題を解決する手助けはできますか? –

関連する問題