Skip to content

Commit d186222

Browse files
committed
HHH-19579 Criteria update join - Column 'code' in SET is ambiguous
1 parent 610d11b commit d186222

File tree

5 files changed

+41
-3
lines changed

5 files changed

+41
-3
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/MariaDBLegacySqlAstTranslator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,4 +394,13 @@ protected void renderStringContainsExactlyPredicate(Expression haystack, Express
394394
needle.accept( this );
395395
appendSql( ",'~','~~'),'?','~?'),'%','~%'),'%') escape '~'" );
396396
}
397+
398+
@Override
399+
protected void appendAssignmentColumn(ColumnReference column) {
400+
column.appendColumnForWrite(
401+
this,
402+
getAffectedTableNames().size() > 1 && !(getStatement() instanceof InsertSelectStatement)
403+
? determineColumnReferenceQualifier( column )
404+
: null );
405+
}
397406
}

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/MySQLLegacySqlAstTranslator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,4 +385,13 @@ protected void renderStringContainsExactlyPredicate(Expression haystack, Express
385385
needle.accept( this );
386386
appendSql( ",'~','~~'),'?','~?'),'%','~%'),'%') escape '~'" );
387387
}
388+
389+
@Override
390+
protected void appendAssignmentColumn(ColumnReference column) {
391+
column.appendColumnForWrite(
392+
this,
393+
getAffectedTableNames().size() > 1 && !(getStatement() instanceof InsertSelectStatement)
394+
? determineColumnReferenceQualifier( column )
395+
: null );
396+
}
388397
}

hibernate-core/src/main/java/org/hibernate/dialect/sql/ast/MariaDBSqlAstTranslator.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,4 +422,12 @@ protected void renderUpdatevalue(ColumnValueBinding columnValueBinding) {
422422
appendSql( ")" );
423423
}
424424

425+
@Override
426+
protected void appendAssignmentColumn(ColumnReference column) {
427+
column.appendColumnForWrite(
428+
this,
429+
getAffectedTableNames().size() > 1 && !(getStatement() instanceof InsertSelectStatement)
430+
? determineColumnReferenceQualifier( column )
431+
: null );
432+
}
425433
}

hibernate-core/src/main/java/org/hibernate/dialect/sql/ast/MySQLSqlAstTranslator.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,4 +459,12 @@ private void renderAlias() {
459459
appendSql( "tr" );
460460
}
461461

462+
@Override
463+
protected void appendAssignmentColumn(ColumnReference column) {
464+
column.appendColumnForWrite(
465+
this,
466+
getAffectedTableNames().size() > 1 && !(getStatement() instanceof InsertSelectStatement)
467+
? determineColumnReferenceQualifier( column )
468+
: null );
469+
}
462470
}

hibernate-core/src/main/java/org/hibernate/sql/ast/spi/AbstractSqlAstTranslator.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,7 +1143,7 @@ protected void visitSetAssignment(Assignment assignment) {
11431143
final List<ColumnReference> columnReferences = assignable.getColumnReferences();
11441144
final Expression assignedValue = assignment.getAssignedValue();
11451145
if ( columnReferences.size() == 1 ) {
1146-
columnReferences.get( 0 ).appendColumnForWrite( this, null );
1146+
appendAssignmentColumn( columnReferences.get( 0 ) );
11471147
appendSql( '=' );
11481148
final SqlTuple sqlTuple = getSqlTuple( assignedValue );
11491149
if ( sqlTuple != null ) {
@@ -1158,7 +1158,7 @@ else if ( assignedValue instanceof SelectStatement ) {
11581158
char separator = OPEN_PARENTHESIS;
11591159
for ( ColumnReference columnReference : columnReferences ) {
11601160
appendSql( separator );
1161-
columnReference.appendColumnForWrite( this, null );
1161+
appendAssignmentColumn( columnReference );
11621162
separator = COMMA_SEPARATOR_CHAR;
11631163
}
11641164
appendSql( ")=" );
@@ -1167,7 +1167,7 @@ else if ( assignedValue instanceof SelectStatement ) {
11671167
else {
11681168
assert assignedValue instanceof SqlTupleContainer;
11691169
final List<? extends Expression> expressions = ( (SqlTupleContainer) assignedValue ).getSqlTuple().getExpressions();
1170-
columnReferences.get( 0 ).appendColumnForWrite( this, null );
1170+
appendAssignmentColumn( columnReferences.get( 0 ) );
11711171
appendSql( '=' );
11721172
expressions.get( 0 ).accept( this );
11731173
for ( int i = 1; i < columnReferences.size(); i++ ) {
@@ -1179,6 +1179,10 @@ else if ( assignedValue instanceof SelectStatement ) {
11791179
}
11801180
}
11811181

1182+
protected void appendAssignmentColumn(ColumnReference column) {
1183+
column.appendColumnForWrite( this, null );
1184+
}
1185+
11821186
protected void visitSetAssignmentEmulateJoin(Assignment assignment, UpdateStatement statement) {
11831187
final Assignable assignable = assignment.getAssignable();
11841188
if ( assignable instanceof SqmPathInterpretation<?> sqmPathInterpretation ) {

0 commit comments

Comments
 (0)