Skip to content

Commit fe748a7

Browse files
committed
HHH-19579 Criteria update join - Column 'code' in SET is ambiguous
1 parent 9a9e147 commit fe748a7

File tree

5 files changed

+37
-3
lines changed

5 files changed

+37
-3
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,4 +399,12 @@ protected void renderStringContainsExactlyPredicate(Expression haystack, Express
399399
needle.accept( this );
400400
appendSql( ",'~','~~'),'?','~?'),'%','~%'),'%') escape '~'" );
401401
}
402+
403+
@Override
404+
protected void appendAssignmentColumn(ColumnReference column) {
405+
column.appendColumnForWrite(
406+
this,
407+
getAffectedTableNames().size() > 1 ? determineColumnReferenceQualifier( column ) : null
408+
);
409+
}
402410
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,4 +390,12 @@ protected void renderStringContainsExactlyPredicate(Expression haystack, Express
390390
needle.accept( this );
391391
appendSql( ",'~','~~'),'?','~?'),'%','~%'),'%') escape '~'" );
392392
}
393+
394+
@Override
395+
protected void appendAssignmentColumn(ColumnReference column) {
396+
column.appendColumnForWrite(
397+
this,
398+
getAffectedTableNames().size() > 1 ? determineColumnReferenceQualifier( column ) : null
399+
);
400+
}
393401
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,4 +427,11 @@ protected void renderUpdatevalue(ColumnValueBinding columnValueBinding) {
427427
appendSql( ")" );
428428
}
429429

430+
@Override
431+
protected void appendAssignmentColumn(ColumnReference column) {
432+
column.appendColumnForWrite(
433+
this,
434+
getAffectedTableNames().size() > 1 ? determineColumnReferenceQualifier( column ) : null
435+
);
436+
}
430437
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,4 +464,11 @@ private void renderAlias() {
464464
appendSql( "tr" );
465465
}
466466

467+
@Override
468+
protected void appendAssignmentColumn(ColumnReference column) {
469+
column.appendColumnForWrite(
470+
this,
471+
getAffectedTableNames().size() > 1 ? determineColumnReferenceQualifier( column ) : null
472+
);
473+
}
467474
}

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
@@ -1160,7 +1160,7 @@ protected void visitSetAssignment(Assignment assignment) {
11601160
final List<ColumnReference> columnReferences = assignable.getColumnReferences();
11611161
final Expression assignedValue = assignment.getAssignedValue();
11621162
if ( columnReferences.size() == 1 ) {
1163-
columnReferences.get( 0 ).appendColumnForWrite( this, null );
1163+
appendAssignmentColumn( columnReferences.get( 0 ) );
11641164
appendSql( '=' );
11651165
final SqlTuple sqlTuple = getSqlTuple( assignedValue );
11661166
if ( sqlTuple != null ) {
@@ -1175,7 +1175,7 @@ else if ( assignedValue instanceof SelectStatement ) {
11751175
char separator = OPEN_PARENTHESIS;
11761176
for ( ColumnReference columnReference : columnReferences ) {
11771177
appendSql( separator );
1178-
columnReference.appendColumnForWrite( this, null );
1178+
appendAssignmentColumn( columnReference );
11791179
separator = COMMA_SEPARATOR_CHAR;
11801180
}
11811181
appendSql( ")=" );
@@ -1184,7 +1184,7 @@ else if ( assignedValue instanceof SelectStatement ) {
11841184
else {
11851185
assert assignedValue instanceof SqlTupleContainer;
11861186
final List<? extends Expression> expressions = ( (SqlTupleContainer) assignedValue ).getSqlTuple().getExpressions();
1187-
columnReferences.get( 0 ).appendColumnForWrite( this, null );
1187+
appendAssignmentColumn( columnReferences.get( 0 ) );
11881188
appendSql( '=' );
11891189
expressions.get( 0 ).accept( this );
11901190
for ( int i = 1; i < columnReferences.size(); i++ ) {
@@ -1196,6 +1196,10 @@ else if ( assignedValue instanceof SelectStatement ) {
11961196
}
11971197
}
11981198

1199+
protected void appendAssignmentColumn(ColumnReference column) {
1200+
column.appendColumnForWrite( this, null );
1201+
}
1202+
11991203
protected void visitSetAssignmentEmulateJoin(Assignment assignment, UpdateStatement statement) {
12001204
final Assignable assignable = assignment.getAssignable();
12011205
if ( assignable instanceof SqmPathInterpretation<?> sqmPathInterpretation ) {

0 commit comments

Comments
 (0)