From 857de15b27938de5735f6a7668327f56ba2feebe Mon Sep 17 00:00:00 2001 From: Gavin King Date: Fri, 20 Jun 2025 22:50:26 +0200 Subject: [PATCH] HHH-19566 test to reproduce bug --- .../annotations/ManyToOneFilterTest.java | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/ManyToOneFilterTest.java diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/ManyToOneFilterTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/ManyToOneFilterTest.java new file mode 100644 index 000000000000..9d838466b729 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/ManyToOneFilterTest.java @@ -0,0 +1,84 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.where.annotations; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import org.hibernate.EntityFilterException; +import org.hibernate.annotations.Filter; +import org.hibernate.annotations.FilterDef; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.fail; + +@SessionFactory +@DomainModel(annotatedClasses = + {ManyToOneFilterTest.X.class, + ManyToOneFilterTest.Y.class}) +class ManyToOneFilterTest { + @Test void test(SessionFactoryScope scope) { + scope.inTransaction(session -> { + Y y = new Y(); + X x = new X(); + x.id = -1; + y.x = x; + session.persist(x); + session.persist(y); + }); + scope.inTransaction(session -> { + Y y = session.find(Y.class, 0L); + assertNotNull(y.x); + }); + try { + scope.inTransaction( session -> { + session.enableFilter( "filter" ).validate(); + var graph = session.createEntityGraph(Y.class); +// graph.removeAttributeNode(ManyToOneFilterTest_.Y_.x); + Y y = session.find( graph, 0L ); + } ); + fail(); + } + catch (EntityFilterException efe) { + //required + } + try { + scope.inTransaction(session -> { + session.enableFilter( "filter" ).validate(); + Y y = session.find(Y.class, 0L); + }); + fail(); + } + catch (EntityFilterException efe) { + //required + } + } + + @Entity + @Table(name = "XX") + @FilterDef(name = "filter", + applyToLoadByKey = true) + @Filter(name = "filter", condition = "id>0") + static class X { + @Id + long id; + } + @Entity + @Table(name = "YY") + static class Y { + @Id + long id; + String name; + @ManyToOne + @JoinColumn(name = "xx") + X x; + } +}