2017-02-08 9 views
3

私はOracleデータベース内の文字列を分音記号で検索したいとします。つまり、 "o"を入力して "o"と "o"、 "ö"または "ô"を検索します。
は、私は次のようにベースレター演算子[==]とネイティブSQLでREGEXP_LIKE()関数でそれを行うことができます。querydslでoracle REGEXP_LIKE()を使用するには?

where REGEXP_LIKE(<column_name>,'[[=o=]]') 

はしかし、今、私はQueryDSLでそれを行う方法を知りません。私は@https://github.com/querydsl/querydsl/issues/1713というソリューションを試しましたが、成功しませんでした。

現在のコードは次の通りです:

return new JPAQuery<AEntity>(em) 
      .from(QAEntity.aEntity) 
      .where(Expressions.booleanTemplate("REGEXP_LIKE({0}, {1})", QAEntity.aEntity.name, "[[=o=]]")) 
      .orderBy(QAEntity.aEntity.name.asc()) 
      .fetch(); 

それはそのような例外をスロー:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: (near line 3, column 18 [select aEntity 
from domain.AEntity aEntity 
where REGEXP_LIKE(aEntity.name, ?1) 
order by aEntity.name asc] 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) 
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:268) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76) 
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150) 
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:302) 
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:240) 
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1894) 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:291) 
    ... 123 common frames omitted 

は、誰もがいくつかのアイデアを提案してくださいことはできますか?

答えて

1

あなたはそれが

return new JPAQuery<AEntity>(em) 
      .from(QAEntity.aEntity) 
      .where(Expressions.booleanTemplate("REGEXP_LIKE({0}, '{1}')", QAEntity.aEntity.name, "[[=o=]]")) 
      .orderBy(QAEntity.aEntity.name.asc()) 
      .fetch(); 

EDITようにする必要があり{1}

の近くに引用符を忘れてしまいました。私の最終的な解決策は、DB &サーバーを構成している(私の場合にはJBossのある)linguitics検索をサポートするために、私はあなたがregexp_likeを使用する必要がある場合は、同じ問題にしている人のために次の

(Expressions.booleanTemplate 
       ("function('REGEXP_LIKE', {0}, {1})", QAEntity.aEntity.name, "[[=o=]]")) 
+0

@MichaelPiankovに感謝しましたが、エラーはまだ同じです – doannx

+0

私は間違いを@doannxします。ありがとうございました。私は正しい答えを加える。 –

+0

私はあなたの編集を試みましたが、残念ながら、エラーは引き続き次のようになっています:原因:org.hibernate.hql.internal.ast.QuerySyntaxException:予期しないASTノード:3行目、7列目の関数[REGEXP_LIKE] [select aEntity domain.AEntity aEntity function( 'REGEXP_LIKE'、aEntity.name、?1) order by aEntity.name asc] \t at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) \t at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91)... ' – doannx

0

を指定する必要がありますことを発見しました私のコードを変更する必要はありません。

関連する問題