Skip to content

Commit 7f03854

Browse files
committed
HHH-18991 enable more use of parameters in Restrictions
1 parent bd89d38 commit 7f03854

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

hibernate-core/src/main/java/org/hibernate/query/range/Interval.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ record Interval<U extends Comparable<U>>(LowerBound<U> lowerBound, UpperBound<U>
1919
public Predicate toPredicate(Path<? extends U> path, CriteriaBuilder builder) {
2020
return lowerBound.open() || upperBound.open()
2121
? builder.and( lowerBound.toPredicate( path, builder ), upperBound.toPredicate( path, builder ) )
22-
: builder.between( path, builder.literal( lowerBound.bound() ), builder.literal( upperBound.bound() ) );
22+
: builder.between( path, lowerBound.bound(), upperBound.bound() );
2323
}
2424

2525
@Override

hibernate-core/src/main/java/org/hibernate/query/range/Pattern.java

+12-8
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@
1616
* @author Gavin King
1717
*/
1818
record Pattern(String pattern, boolean caseSensitive) implements Range<String> {
19+
20+
// default escape and wildcard characters
21+
private static final char ESCAPE = '\\';
22+
private static final char WILDCARD_CHAR = '_';
23+
private static final char WILDCARD_STRING = '%';
24+
1925
Pattern(String pattern, boolean caseSensitive, char charWildcard, char stringWildcard) {
2026
this( translate( pattern, charWildcard, stringWildcard ), caseSensitive );
2127
}
@@ -25,10 +31,8 @@ public Predicate toPredicate(Path<? extends String> path, CriteriaBuilder builde
2531
@SuppressWarnings("unchecked")
2632
final Path<String> stringPath = (Path<String>) path; // safe, because String is final
2733
return caseSensitive
28-
? builder.like( stringPath, builder.literal( pattern ), '\\' )
29-
: builder.like( builder.lower( stringPath ),
30-
builder.literal( pattern.toLowerCase( Locale.ROOT ) ),
31-
'\\' );
34+
? builder.like( stringPath, pattern, ESCAPE )
35+
: builder.like( builder.lower( stringPath ), pattern.toLowerCase( Locale.ROOT ), ESCAPE );
3236
}
3337

3438
@Override
@@ -41,14 +45,14 @@ private static String translate(String pattern, char charWildcard, char stringWi
4145
for ( int i = 0; i < pattern.length(); i++ ) {
4246
final char ch = pattern.charAt( i );
4347
if ( ch == charWildcard ) {
44-
result.append( '_' );
48+
result.append( WILDCARD_CHAR );
4549
}
4650
else if ( ch == stringWildcard ) {
47-
result.append( '%' );
51+
result.append( WILDCARD_STRING );
4852
}
4953
else {
50-
if ( ch == '%' || ch == '_' || ch == '\\' ) {
51-
result.append( '\\' );
54+
if ( ch == WILDCARD_STRING || ch == WILDCARD_CHAR || ch == ESCAPE ) {
55+
result.append( ESCAPE );
5256
}
5357
result.append( ch );
5458
}

hibernate-core/src/main/java/org/hibernate/query/range/ValueList.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ record ValueList<U>(List<U> values) implements Range<U> {
2727

2828
@Override
2929
public Predicate toPredicate(Path<? extends U> path, CriteriaBuilder builder) {
30-
return path.in( values.stream().map( builder::literal ).toList() );
30+
return path.in( values );
3131
}
3232

3333
@Override

0 commit comments

Comments
 (0)