Criteria APIでキャストを書くにはどうすればよいでしょうか? #1473
-
|
いつも楽しく Doma を利用させていただいております! Criteria APIで検索をするとき、数値の列を文字列で検索したいと思っています。 以下のようなコードがあるときに、 @Entity(immutable = true, metamodel = @Metamodel)
record Member(
@Id Long id,
Integer memberNumber) {
}
List<Member> search(String memberNumberPrefix) {
final QueryDsl queryDsl = null; // 割愛します。
final var member_ = new Member_();
return queryDsl
.from(member_)
// ここで member_.memberNumber を文字列にキャストしたいです。
.where(c -> c.like(member_.memberNumber, memberNumberPrefix, LikeOption.prefix()))
.fetch();
}以下のようなSQLを作成したいです。 SELECT * FROM member WHERE member_number::text like '12%';ユーザー定義式を使えば実現できるのかな?と予想しているのですが、 |
Beta Was this translation helpful? Give feedback.
Answered by
nakamura-to
Nov 13, 2025
Replies: 1 comment 3 replies
-
|
すみません、おそらく自己解決しました。 まだ自信がないのでアドバイスはいただきたいのですが、 UserDefinedExpression<String> castToText(PropertyMetamodel<?> from) {
return Expressions.userDefined(String.class, "castToText", from, c -> {
c.appendExpression(from);
c.appendSql("::text");
});
}
List<Member> search(String memberNumberPrefix) {
final QueryDsl queryDsl = null; // 割愛します。
final var member_ = new Member_();
return queryDsl
.from(member_)
.where(c -> c.like(castToText(member_.memberNumber), memberNumberPrefix, LikeOption.prefix()))
.fetch();
} |
Beta Was this translation helpful? Give feedback.
3 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
はい、適切です!