開発が進んで、いよいよJPQLの世界にどっぷり入っていく必要がありそうです。
今の開発では、動的クエリをメインに利用する方針にしています。
間違い防止やスキーマ変更に強くするためにもCriateria APIを利用したい所ですが、業務系のシステムではクエリが複雑になるケースも多々あるため、可読性や効率性を選んで今回Criteriaは止めました(^^;
あれがゴリゴリ書ける人は本当すごいと思います。。。
さて、今日出会った小さな壁は、検索処理の際、パーセント(%)やアンダースコア(_)を含んだ検索をしたい、というものです。
例えば普通に
SELECT o FROM Opportunity o WHERE o.opportunityName LIKE '商談%'
とJPQLを書いて検索すると
商談ほにゃらら
商談hogehoge
みたいな商談名が拾えます。普通のLIKE式です。
で、今回は以下のような商談名があった場合
この商談は駄目確率0%
100%上手くいく商談
検索で「0%」を含むやつ、とか、「100%」で始まる、とか検索したい、みたいな。
金魚本みたのですが情報はなく、今回は珍しく色々ググる前にJSRをみてみました(^^;
http://jcp.org/en/home/index
JPAのspecの中にLike Expressionsのページがあり、かなりわかりやすい例でExamplesがあって、すぐ解決しました。
SELECT o FROM Opportunity o WHERE o.opportunityName LIKE '%0\%' ESCAPE '\'
SELECT o FROM Opportunity o WHERE o.opportunityName LIKE '100\%%' ESCAPE '\'
上記ウィンドウはNetBeans 7.3から入ったJava Persistence JPQL testing toolの結果ウィンドウです。これがあるとないでは開発効率に差が出る気がします(^^;
過去エントリで少し触れています→「NetBeans7.3で嬉しかったこと!」
エスケープでいける、ってことで通常のSQLと大差ない感じのようです。
上記例は、%のみですが、アンダースコア(_)も同じです。