Skip to content

Commit 92d447c

Browse files
committed
Make use of JavaType in SqlSelection
1 parent 30bb01d commit 92d447c

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/Expression.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ default SqlSelection createSqlSelection(
3838
return new SqlSelectionImpl(
3939
jdbcPosition,
4040
valuesArrayPosition,
41+
javaType,
4142
this
4243
);
4344
}

hibernate-core/src/main/java/org/hibernate/sql/exec/internal/AbstractJdbcParameter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public SqlSelection createSqlSelection(
6868
return new SqlSelectionImpl(
6969
jdbcPosition,
7070
valuesArrayPosition,
71+
javaType,
7172
this
7273
);
7374
}

hibernate-core/src/main/java/org/hibernate/sql/results/internal/ResolvedSqlSelection.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public ResolvedSqlSelection(
2727
int valuesArrayPosition,
2828
Expression sqlExpression,
2929
BasicType<Object> resolvedType) {
30-
super( jdbcPosition, valuesArrayPosition, sqlExpression );
30+
super( jdbcPosition, valuesArrayPosition, null, sqlExpression );
3131
this.resolvedType = resolvedType;
3232
}
3333

hibernate-core/src/main/java/org/hibernate/sql/results/internal/SqlSelectionImpl.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.Objects;
1010

1111
import org.hibernate.engine.spi.SessionFactoryImplementor;
12+
import org.hibernate.metamodel.mapping.JdbcMapping;
1213
import org.hibernate.metamodel.mapping.JdbcMappingContainer;
1314
import org.hibernate.metamodel.mapping.SqlExpressible;
1415
import org.hibernate.sql.ast.SqlAstWalker;
@@ -19,6 +20,7 @@
1920
import org.hibernate.type.BasicType;
2021
import org.hibernate.type.JavaObjectType;
2122
import org.hibernate.type.descriptor.ValueExtractor;
23+
import org.hibernate.type.descriptor.java.JavaType;
2224

2325
/**
2426
* @asciidoc
@@ -43,10 +45,16 @@ public class SqlSelectionImpl implements SqlSelection, SqlExpressionAccess {
4345
private final int jdbcPosition;
4446
private final int valuesArrayPosition;
4547
private final Expression sqlExpression;
48+
private final JavaType<?> jdbcJavaType;
4649

4750
public SqlSelectionImpl(int jdbcPosition, int valuesArrayPosition, Expression sqlExpression) {
51+
this( jdbcPosition, valuesArrayPosition, null, sqlExpression );
52+
}
53+
54+
public SqlSelectionImpl(int jdbcPosition, int valuesArrayPosition, JavaType<?> jdbcJavaType, Expression sqlExpression) {
4855
this.jdbcPosition = jdbcPosition;
4956
this.valuesArrayPosition = valuesArrayPosition;
57+
this.jdbcJavaType = jdbcJavaType;
5058
this.sqlExpression = sqlExpression;
5159
}
5260

@@ -57,7 +65,11 @@ public Expression getExpression() {
5765

5866
@Override
5967
public ValueExtractor getJdbcValueExtractor() {
60-
return ( (SqlExpressible) sqlExpression.getExpressionType() ).getJdbcMapping().getJdbcValueExtractor();
68+
final JdbcMapping jdbcMapping = ( (SqlExpressible) sqlExpression.getExpressionType() ).getJdbcMapping();
69+
if ( jdbcJavaType == null || jdbcMapping.getMappedJavaType() == jdbcJavaType ) {
70+
return jdbcMapping.getJdbcValueExtractor();
71+
}
72+
return jdbcMapping.getJdbcType().getExtractor( jdbcJavaType );
6173
}
6274

6375
@Override

0 commit comments

Comments
 (0)