diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java index 955494ef95..bc991ec3e9 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java @@ -1586,11 +1586,22 @@ public void bindParameterValue( @Override public Values visitValues(SqmValues sqmValues) { + final List> insertionTargetPaths; + if ( currentSqmStatement instanceof SqmInsertStatement ) { + insertionTargetPaths = ( (SqmInsertStatement) currentSqmStatement ).getInsertionTargetPaths(); + } + else { + insertionTargetPaths = null; + } final List> expressions = sqmValues.getExpressions(); final ArrayList valuesExpressions = new ArrayList<>( expressions.size() ); - for ( SqmExpression expression : expressions ) { + for ( int i = 0; i < expressions.size(); i++ ) { // todo: add WriteExpression handling - valuesExpressions.add( (Expression) expression.accept( this ) ); + valuesExpressions.add( + insertionTargetPaths == null + ? (Expression) expressions.get( i ).accept( this ) + : visitWithInferredType( expressions.get( i ), insertionTargetPaths.get( i ) ) + ); } return new Values( valuesExpressions ); }