Skip to content

Commit 5493bcd

Browse files
committed
HHH-15142 CriteriaQuery with Like predicate fails when repeated with java.lang.IllegalArgumentException: Parameter value [] did not match expected type [java.lang.String (n/a)]
1 parent cc31309 commit 5493bcd

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

hibernate-core/src/main/java/org/hibernate/query/criteria/internal/compile/CriteriaCompiler.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public Stack<FunctionExpression> getFunctionStack() {
9494
public ExplicitParameterInfo registerExplicitParameter(ParameterExpression<?> criteriaQueryParameter) {
9595
ExplicitParameterInfo parameterInfo = explicitParameterInfoMap.get( criteriaQueryParameter );
9696
if ( parameterInfo == null ) {
97-
if ( StringHelper.isNotEmpty( criteriaQueryParameter.getName() ) ) {
97+
if ( StringHelper.isNotEmpty( criteriaQueryParameter.getName() ) && !( (ParameterExpressionImpl) criteriaQueryParameter ).isNameGenerated() ) {
9898
parameterInfo = new ExplicitParameterInfo(
9999
criteriaQueryParameter.getName(),
100100
null,
@@ -109,9 +109,8 @@ else if ( criteriaQueryParameter.getPosition() != null ) {
109109
);
110110
}
111111
else {
112-
final String name = generateParameterName();
113112
parameterInfo = new ExplicitParameterInfo(
114-
name,
113+
generateParameterName(),
115114
null,
116115
criteriaQueryParameter.getJavaType()
117116
);

hibernate-core/src/main/java/org/hibernate/query/criteria/internal/expression/ParameterExpressionImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class ParameterExpressionImpl<T>
2525
implements ParameterExpression<T>, Serializable {
2626
private String name;
2727
private final Integer position;
28+
private boolean isNameGenerated;
2829

2930
public ParameterExpressionImpl(
3031
CriteriaBuilderImpl criteriaBuilder,
@@ -57,6 +58,10 @@ public String getName() {
5758
return name;
5859
}
5960

61+
public boolean isNameGenerated() {
62+
return isNameGenerated;
63+
}
64+
6065
@Override
6166
public Integer getPosition() {
6267
return position;
@@ -76,6 +81,7 @@ public void registerParameters(ParameterRegistry registry) {
7681
public String render(RenderingContext renderingContext) {
7782
final ExplicitParameterInfo parameterInfo = renderingContext.registerExplicitParameter( this );
7883
if ( name == null && position == null ) {
84+
isNameGenerated = true;
7985
name = parameterInfo.getName();
8086
}
8187
return parameterInfo.render();

0 commit comments

Comments
 (0)