From 654863fa9d3ca51c66fcaeea26f9c614d876f4a8 Mon Sep 17 00:00:00 2001 From: Christian Beikov Date: Wed, 27 Aug 2025 12:04:06 +0200 Subject: [PATCH] HHH-19740 Delegate table related resolving to mutating table reference --- .../MutatingTableReferenceGroupWrapper.java | 6 +- .../MutationQueriesCollectionTableTest.java | 60 +++++++++++++++++++ 2 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 hibernate-core/src/test/java/org/hibernate/orm/test/query/mutationquery/MutationQueriesCollectionTableTest.java diff --git a/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/from/MutatingTableReferenceGroupWrapper.java b/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/from/MutatingTableReferenceGroupWrapper.java index efbaeeeda9af..a531d83b5b5c 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/from/MutatingTableReferenceGroupWrapper.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/from/MutatingTableReferenceGroupWrapper.java @@ -64,14 +64,12 @@ public TableReference getTableReference( NavigablePath navigablePath, String tableExpression, boolean resolve) { - return mutatingTableReference.getTableExpression().equals( tableExpression ) - ? mutatingTableReference - : null; + return mutatingTableReference.getTableReference( tableExpression ); } @Override public void applyAffectedTableNames(Consumer nameCollector) { - nameCollector.accept( mutatingTableReference.getTableExpression() ); + mutatingTableReference.applyAffectedTableNames( nameCollector); } @Override diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/query/mutationquery/MutationQueriesCollectionTableTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/query/mutationquery/MutationQueriesCollectionTableTest.java new file mode 100644 index 000000000000..467acb159696 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/query/mutationquery/MutationQueriesCollectionTableTest.java @@ -0,0 +1,60 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html + */ +package org.hibernate.orm.test.query.mutationquery; + +import java.util.List; + +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.Jira; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Inheritance; +import jakarta.persistence.InheritanceType; + +@SessionFactory +@DomainModel(annotatedClasses = { + MutationQueriesCollectionTableTest.Base1.class, + MutationQueriesCollectionTableTest.Table1.class +}) +@Jira("https://hibernate.atlassian.net/browse/HHH-19740") +public class MutationQueriesCollectionTableTest { + + @Test + public void testDelete(SessionFactoryScope scope) { + scope.inTransaction( session -> { + session.createQuery( "delete from Table1 where name = :name" ) + .setParameter( "name", "test" ) + .executeUpdate(); + } ); + } + + @Entity(name = "Base1") + @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) + public abstract static class Base1 { + + @Id + private Long id; + + @SuppressWarnings("unused") + private String name; + + @ElementCollection + private List roles; + + } + + @Entity(name = "Table1") + @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) + public static class Table1 extends Base1 { + + } +}