Skip to content

Commit 9678101

Browse files
committed
HHH-19579 Criteria update join - Column 'code' in SET is ambiguous
1 parent fbbef0a commit 9678101

File tree

5 files changed

+45
-3
lines changed

5 files changed

+45
-3
lines changed

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

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

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

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

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

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

430+
@Override
431+
protected void appendAssignmentColumn(ColumnReference column) {
432+
if ( getAffectedTableNames().size() > 1 && !(getStatement() instanceof InsertSelectStatement) ) {
433+
column.appendColumnForWrite( this );
434+
}
435+
else {
436+
column.appendColumnForWrite( this, null );
437+
}
438+
}
430439
}

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

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

467+
@Override
468+
protected void appendAssignmentColumn(ColumnReference column) {
469+
if ( getAffectedTableNames().size() > 1 && !(getStatement() instanceof InsertSelectStatement) ) {
470+
column.appendColumnForWrite( this );
471+
}
472+
else {
473+
column.appendColumnForWrite( this, null );
474+
}
475+
}
467476
}

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)