こんばんは、Oinuさん
jfluteです
外だしSQLではなく ConditionBean で実現したいということですね。
一応、こういった機能があります。
e.g. MEMBER_NAME と MEMBER_ACCOUNT を連結して部分一致検索
java
1memberBhv.selectList(cb -> {
2 cb.query().setMemberName_LikeSearch("S", op -> {
3 op.addCompoundColumn(cb.dreamCruiseCB().specify().columnMemberAccount());
4 op.likeContain();
5 });
6});
LikeSearchOptionに addCompoundColumn() というメソッドがあり、
like検索のカラムを複合化することができます。
引数では、連結するカラムを表現するために、
cb.dreamCruiseCB()という特殊なメソッドで独立したCBインスタンスを作成し、
そのCBでSpecifyColumnでカラムを指定します。
ソースコード的には、ConditionKeyクラスのresolveCompoundColumn()が該当します。
https://github.com/dbflute/dbflute-core/blob/21192aa0f4690f6f34b8c14c5f4d1d59d1e32aa7/dbflute-runtime/src/main/java/org/dbflute/cbean/ckey/ConditionKey.java#L443
一応、お約束ですが、
もちろんのことですが、あまりオススメはできません。
「データベースの仕様変更は難しい」とのことですが、
明らかに遅くなりそうなので、検索用の別のカラムを導入したり、
フルネームの部分一致の必要性があるかどうか再検討したりするなど、
根本的な解決ができる方が良いです。いま実装して実現できたとしても、
本番環境でパフォーマンス問題を引き起こしてしまう可能性もあるからです。
(別の方がこの記事を読んだ時、根本的な解決ができるはずなのに、
気軽にこの方法解決してしまわないように書かせていただいています)
そういう前提があることから、
この機能はあまり表立った機能にしていないという現状です。
(結局、外だしSQLで何でもできてしまいますし)
もし、この方法で実装する場合は、ソースコードのコメントに、
しっかり前提や使い方などを書いておいて頂ければと思います。
例えば、パフォーマンスを気にしないで良い場面とかなのであれば、
「連結コストのパフォーマンスを気にするほどレコード数が存在しない想定」とか、
書いてあると、後から見た人が助かるかと思います。
※この投稿へのリンクを貼っておくとかでもいいかと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/10 17:16
2018/05/10 17:52
2018/05/11 01:11