From 611844fe79a95487a23334a74336344f89fadd2d Mon Sep 17 00:00:00 2001 From: Steve Ebersole Date: Wed, 24 Jul 2024 09:22:16 -0500 Subject: [PATCH] HHH-18199 - Remove @Where and @WhereJoinTable --- .../boot/model/internal/CollectionBinder.java | 18 +- .../source/internal/hbm/ModelBinder.java | 91 ++------ .../org/hibernate/cfg/MappingSettings.java | 23 -- .../where/annotations/EagerManyToOneTest.java | 19 +- ...EagerToManyWhereDontUseClassWhereTest.java | 213 ------------------ .../EagerToManyWhereUseClassWhereTest.java | 28 +-- .../LazyToManyWhereDontUseClassWhereTest.java | 213 ------------------ .../LazyToManyWhereUseClassWhereTest.java | 28 +-- ...EagerToManyWhereDontUseClassWhereTest.java | 162 ------------- .../EagerToManyWhereUseClassWhereTest.java | 10 +- .../LazyToManyWhereDontUseClassWhereTest.java | 162 ------------- .../hbm/LazyToManyWhereUseClassWhereTest.java | 14 +- 12 files changed, 53 insertions(+), 928 deletions(-) delete mode 100644 hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerToManyWhereDontUseClassWhereTest.java delete mode 100644 hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/LazyToManyWhereDontUseClassWhereTest.java delete mode 100644 hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/EagerToManyWhereDontUseClassWhereTest.java delete mode 100644 hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/LazyToManyWhereDontUseClassWhereTest.java diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionBinder.java index 3775293dbf..b5b729d840 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/CollectionBinder.java @@ -173,7 +173,6 @@ import static org.hibernate.boot.model.internal.DialectOverridesAnnotationHelper import static org.hibernate.boot.model.internal.EmbeddableBinder.fillEmbeddable; import static org.hibernate.boot.model.internal.GeneratorBinder.buildGenerators; import static org.hibernate.boot.model.internal.PropertyHolderBuilder.buildPropertyHolder; -import static org.hibernate.boot.model.source.internal.hbm.ModelBinder.useEntityWhereClauseForCollections; import static org.hibernate.engine.spi.ExecuteUpdateResultCheckStyle.fromResultCheckStyle; import static org.hibernate.internal.util.ReflectHelper.getDefaultSupplier; import static org.hibernate.internal.util.StringHelper.getNonEmptyOrConjunctionIfBothNonEmpty; @@ -1894,17 +1893,12 @@ public abstract class CollectionBinder { private String getWhereOnClassClause() { final TypeDetails elementType = property.getElementType(); - if ( elementType != null && useEntityWhereClauseForCollections( buildingContext ) ) { - final SQLRestriction restrictionOnClass = getOverridableAnnotation( - property.getAssociatedType().determineRawClass(), - SQLRestriction.class, - buildingContext - ); - return restrictionOnClass != null ? restrictionOnClass.value() : null; - } - else { - return null; - } + final SQLRestriction restrictionOnClass = getOverridableAnnotation( + property.getAssociatedType().determineRawClass(), + SQLRestriction.class, + buildingContext + ); + return restrictionOnClass != null ? restrictionOnClass.value() : null; } private void addFilterJoinTable(boolean hasAssociationTable, FilterJoinTable filter) { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/source/internal/hbm/ModelBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/source/internal/hbm/ModelBinder.java index 7528420dba..97f088731a 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/source/internal/hbm/ModelBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/source/internal/hbm/ModelBinder.java @@ -18,7 +18,6 @@ import java.util.Properties; import org.hibernate.AssertionFailure; import org.hibernate.FetchMode; -import org.hibernate.Remove; import org.hibernate.annotations.CascadeType; import org.hibernate.annotations.SourceType; import org.hibernate.boot.MappingException; @@ -99,10 +98,8 @@ import org.hibernate.boot.spi.MetadataBuildingContext; import org.hibernate.boot.spi.NaturalIdUniqueKeyBinder; import org.hibernate.boot.spi.SecondPass; import org.hibernate.cache.spi.access.AccessType; -import org.hibernate.cfg.AvailableSettings; import org.hibernate.engine.FetchStyle; import org.hibernate.engine.FetchTiming; -import org.hibernate.engine.config.spi.ConfigurationService; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; import org.hibernate.engine.spi.FilterDefinition; import org.hibernate.generator.internal.GeneratedGeneration; @@ -111,7 +108,6 @@ import org.hibernate.internal.CoreLogging; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.util.StringHelper; import org.hibernate.internal.util.collections.CollectionHelper; -import org.hibernate.internal.util.config.ConfigurationHelper; import org.hibernate.mapping.Any; import org.hibernate.mapping.Array; import org.hibernate.mapping.AttributeContainer; @@ -163,7 +159,6 @@ import org.hibernate.usertype.UserType; import static org.hibernate.boot.model.internal.GeneratorBinder.makeIdGenerator; import static org.hibernate.boot.model.naming.Identifier.toIdentifier; import static org.hibernate.boot.model.source.internal.hbm.Helper.reflectedPropertyClass; -import static org.hibernate.cfg.AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS; import static org.hibernate.internal.log.DeprecationLogger.DEPRECATION_LOGGER; import static org.hibernate.internal.util.StringHelper.getNonEmptyOrConjunctionIfBothNonEmpty; import static org.hibernate.internal.util.StringHelper.isNotEmpty; @@ -195,28 +190,6 @@ public class ModelBinder { this.relationalObjectBinder = new RelationalObjectBinder( context ); } - /** - * @deprecated Interprets the setting {@value AvailableSettings#USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS}, - * which itself is deprecated - */ - @SuppressWarnings("removal") - @Remove - @Deprecated( since = "6.2" ) - public static boolean useEntityWhereClauseForCollections(MetadataBuildingContext buildingContext) { - final Object explicitSetting = buildingContext - .getBuildingOptions() - .getServiceRegistry() - .requireService( ConfigurationService.class ) - .getSettings() - .get( USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS ); - if ( explicitSetting != null ) { - DEPRECATION_LOGGER.deprecatedSettingNoReplacement( USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS ); - return ConfigurationHelper.toBoolean( explicitSetting, true ); - } - - return true; - } - public void bindEntityHierarchy(EntityHierarchySourceImpl hierarchySource) { final RootClass rootEntityDescriptor = new RootClass( hierarchySource.getRootEntityMappingDocument() ); bindRootEntity( hierarchySource, rootEntityDescriptor ); @@ -3333,9 +3306,7 @@ public class ModelBinder { getPluralAttributeSource().getNature() ); } - if ( getPluralAttributeSource().getElementSource() instanceof PluralAttributeElementSourceBasic ) { - final PluralAttributeElementSourceBasic elementSource = - (PluralAttributeElementSourceBasic) getPluralAttributeSource().getElementSource(); + if ( getPluralAttributeSource().getElementSource() instanceof PluralAttributeElementSourceBasic elementSource ) { final BasicValue elementBinding = new BasicValue( getMappingDocument(), getCollectionBinding().getCollectionTable() @@ -3361,9 +3332,7 @@ public class ModelBinder { // This "where" clause comes from the collection mapping; e.g., getCollectionBinding().setWhere( getPluralAttributeSource().getWhere() ); } - else if ( getPluralAttributeSource().getElementSource() instanceof PluralAttributeElementSourceEmbedded ) { - final PluralAttributeElementSourceEmbedded elementSource = - (PluralAttributeElementSourceEmbedded) getPluralAttributeSource().getElementSource(); + else if ( getPluralAttributeSource().getElementSource() instanceof PluralAttributeElementSourceEmbedded elementSource ) { final Component elementBinding = new Component( getMappingDocument(), getCollectionBinding() @@ -3385,9 +3354,7 @@ public class ModelBinder { // This "where" clause comes from the collection mapping; e.g., getCollectionBinding().setWhere( getPluralAttributeSource().getWhere() ); } - else if ( getPluralAttributeSource().getElementSource() instanceof PluralAttributeElementSourceOneToMany ) { - final PluralAttributeElementSourceOneToMany elementSource = - (PluralAttributeElementSourceOneToMany) getPluralAttributeSource().getElementSource(); + else if ( getPluralAttributeSource().getElementSource() instanceof PluralAttributeElementSourceOneToMany elementSource ) { final OneToMany elementBinding = new OneToMany( getMappingDocument(), getCollectionBinding().getOwner() @@ -3396,32 +3363,18 @@ public class ModelBinder { final PersistentClass referencedEntityBinding = getReferencedEntityBinding( elementSource.getReferencedEntityName() ); - if ( useEntityWhereClauseForCollections( metadataBuildingContext ) ) { - // For a one-to-many association, there are 2 possible sources of "where" clauses that apply - // to the associated entity table: - // 1) from the associated entity mapping; i.e., - // 2) from the collection mapping; e.g., - // Collection#setWhere is used to set the "where" clause that applies to the collection table - // (which is the associated entity table for a one-to-many association). - collectionBinding.setWhere( - getNonEmptyOrConjunctionIfBothNonEmpty( - referencedEntityBinding.getWhere(), - getPluralAttributeSource().getWhere() - ) - ); - } - else { - // ignore entity's where clause - collectionBinding.setWhere( getPluralAttributeSource().getWhere() ); - } + collectionBinding.setWhere( + getNonEmptyOrConjunctionIfBothNonEmpty( + referencedEntityBinding.getWhere(), + getPluralAttributeSource().getWhere() + ) + ); elementBinding.setReferencedEntityName( referencedEntityBinding.getEntityName() ); elementBinding.setAssociatedClass( referencedEntityBinding ); elementBinding.setIgnoreNotFound( elementSource.isIgnoreNotFound() ); } - else if ( getPluralAttributeSource().getElementSource() instanceof PluralAttributeElementSourceManyToMany ) { - final PluralAttributeElementSourceManyToMany elementSource = - (PluralAttributeElementSourceManyToMany) getPluralAttributeSource().getElementSource(); + else if ( getPluralAttributeSource().getElementSource() instanceof PluralAttributeElementSourceManyToMany elementSource ) { final ManyToOne elementBinding = new ManyToOne( getMappingDocument(), getCollectionBinding().getCollectionTable() @@ -3466,24 +3419,12 @@ public class ModelBinder { // This "where" clause comes from the collection mapping; e.g., getCollectionBinding().setWhere( getPluralAttributeSource().getWhere() ); - if ( useEntityWhereClauseForCollections( metadataBuildingContext ) ) { - // For a many-to-many association, there are 2 possible sources of "where" clauses that apply - // to the associated entity table (not the join table): - // 1) from the associated entity mapping; i.e., - // 2) from the many-to-many mapping; i.e - // Collection#setManytoManyWhere is used to set the "where" clause that applies to - // to the many-to-many associated entity table (not the join table). - getCollectionBinding().setManyToManyWhere( - getNonEmptyOrConjunctionIfBothNonEmpty( - referencedEntityBinding.getWhere(), - elementSource.getWhere() - ) - ); - } - else { - // ignore entity's where clause - getCollectionBinding().setManyToManyWhere( elementSource.getWhere() ); - } + getCollectionBinding().setManyToManyWhere( + getNonEmptyOrConjunctionIfBothNonEmpty( + referencedEntityBinding.getWhere(), + elementSource.getWhere() + ) + ); getCollectionBinding().setManyToManyOrdering( elementSource.getOrder() ); diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/MappingSettings.java b/hibernate-core/src/main/java/org/hibernate/cfg/MappingSettings.java index 79e8b39221..98f8692713 100644 --- a/hibernate-core/src/main/java/org/hibernate/cfg/MappingSettings.java +++ b/hibernate-core/src/main/java/org/hibernate/cfg/MappingSettings.java @@ -7,7 +7,6 @@ package org.hibernate.cfg; import org.hibernate.Incubating; -import org.hibernate.Remove; import org.hibernate.SessionFactory; import org.hibernate.annotations.ListIndexBase; import org.hibernate.annotations.Nationalized; @@ -453,28 +452,6 @@ public interface MappingSettings { */ String DEFAULT_LIST_SEMANTICS = "hibernate.mapping.default_list_semantics"; - /** - * The {@link org.hibernate.annotations.SQLRestriction @SQLRestriction} annotation specifies a - * restriction on the table rows which are visible as entity class instances or - * collection elements. - *

- * This setting controls whether the restriction applied to an entity should be - * applied to association fetches (for one-to-one, many-to-one, one-to-many, and - * many-to-many associations) which target the entity. - * - * @apiNote The setting is very misnamed - it applies across all entity associations, - * not only to collections. - * - * @implSpec Enabled ({@code true}) by default, meaning the restriction is applied. - * When this setting is explicitly disabled ({@code false}), the restriction - * is not applied. - * - * @deprecated Originally added as a backwards compatibility flag - */ - @Remove - @Deprecated( forRemoval = true, since = "6.2" ) - String USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS = "hibernate.use_entity_where_clause_for_collections"; - /** * Whether XML should be validated against their schema as Hibernate reads them. * diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerManyToOneTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerManyToOneTest.java index 92e7a266ae..baf2ed8b98 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerManyToOneTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerManyToOneTest.java @@ -9,6 +9,7 @@ import org.hibernate.cfg.AvailableSettings; import org.hibernate.testing.TestForIssue; import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.testing.orm.junit.Setting; import org.junit.jupiter.api.AfterEach; @@ -25,17 +26,11 @@ import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.Assertions.assertThat; -@Jpa( - annotatedClasses = { - EagerManyToOneTest.Child.class, - EagerManyToOneTest.Parent.class - }, - properties = @Setting( name = AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS, value = "false") - -) -@TestForIssue(jiraKey = "HHH-15902") +@SuppressWarnings("JUnitMalformedDeclaration") +@Jpa( annotatedClasses = { EagerManyToOneTest.Child.class, EagerManyToOneTest.Parent.class } ) +@JiraKey("HHH-15902") public class EagerManyToOneTest { @BeforeEach @@ -62,12 +57,12 @@ public class EagerManyToOneTest { @Test public void testFindParent(EntityManagerFactoryScope scope) { - scope.inTransaction( entityManager -> { Parent parent = entityManager.find( Parent.class, 1 ); assertThat( parent ).isNotNull(); - assertThat( parent.children.size() ).isEqualTo( 1 ); + // the Child filter should apply + assertThat( parent.children ).isEmpty(); } ); scope.inTransaction( diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerToManyWhereDontUseClassWhereTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerToManyWhereDontUseClassWhereTest.java deleted file mode 100644 index 516816f0d3..0000000000 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerToManyWhereDontUseClassWhereTest.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * 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 . - */ -package org.hibernate.orm.test.where.annotations; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.annotations.SQLJoinTableRestriction; -import org.hibernate.annotations.SQLRestriction; -import org.hibernate.cfg.AvailableSettings; - -import org.hibernate.testing.TestForIssue; -import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; -import org.junit.Test; - -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -/** - * Tests association collections with AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS = false - * - * @author Gail Badner - */ -public class EagerToManyWhereDontUseClassWhereTest extends BaseNonConfigCoreFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Product.class, Category.class }; - } - - @Override - protected void addSettings(Map settings) { - settings.put( AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS, "false" ); - } - - @Test - @TestForIssue( jiraKey = "HHH-13011" ) - public void testAssociatedWhereClause() { - - Product product = new Product(); - Category flowers = new Category(); - flowers.id = 1; - flowers.name = "flowers"; - flowers.description = "FLOWERS"; - product.categoriesOneToMany.add( flowers ); - product.categoriesWithDescOneToMany.add( flowers ); - product.categoriesManyToMany.add( flowers ); - product.categoriesWithDescManyToMany.add( flowers ); - product.categoriesWithDescIdLt4ManyToMany.add( flowers ); - Category vegetables = new Category(); - vegetables.id = 2; - vegetables.name = "vegetables"; - vegetables.description = "VEGETABLES"; - product.categoriesOneToMany.add( vegetables ); - product.categoriesWithDescOneToMany.add( vegetables ); - product.categoriesManyToMany.add( vegetables ); - product.categoriesWithDescManyToMany.add( vegetables ); - product.categoriesWithDescIdLt4ManyToMany.add( vegetables ); - Category dogs = new Category(); - dogs.id = 3; - dogs.name = "dogs"; - dogs.description = null; - product.categoriesOneToMany.add( dogs ); - product.categoriesWithDescOneToMany.add( dogs ); - product.categoriesManyToMany.add( dogs ); - product.categoriesWithDescManyToMany.add( dogs ); - product.categoriesWithDescIdLt4ManyToMany.add( dogs ); - Category building = new Category(); - building.id = 4; - building.name = "building"; - building.description = "BUILDING"; - product.categoriesOneToMany.add( building ); - product.categoriesWithDescOneToMany.add( building ); - product.categoriesManyToMany.add( building ); - product.categoriesWithDescManyToMany.add( building ); - product.categoriesWithDescIdLt4ManyToMany.add( building ); - - doInHibernate( - this::sessionFactory, - session -> { - session.persist( flowers ); - session.persist( vegetables ); - session.persist( dogs ); - session.persist( building ); - session.persist( product ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Product p = session.get( Product.class, product.id ); - assertNotNull( p ); - assertEquals( 4, p.categoriesOneToMany.size() ); - checkIds( p.categoriesOneToMany, new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.categoriesWithDescOneToMany.size() ); - checkIds( p.categoriesWithDescOneToMany, new Integer[] { 1, 2, 4 } ); - assertEquals( 4, p.categoriesManyToMany.size() ); - checkIds( p.categoriesManyToMany, new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.categoriesWithDescManyToMany.size() ); - checkIds( p.categoriesWithDescManyToMany, new Integer[] { 1, 2, 4 } ); - assertEquals( 2, p.categoriesWithDescIdLt4ManyToMany.size() ); - checkIds( p.categoriesWithDescIdLt4ManyToMany, new Integer[] { 1, 2 } ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Category c = session.get( Category.class, flowers.id ); - assertNotNull( c ); - c.inactive = 1; - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Category c = session.get( Category.class, flowers.id ); - assertNull( c ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Product p = session.get( Product.class, product.id ); - assertNotNull( p ); - assertEquals( 4, p.categoriesOneToMany.size() ); - checkIds( p.categoriesOneToMany, new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.categoriesWithDescOneToMany.size() ); - checkIds( p.categoriesWithDescOneToMany, new Integer[] { 1, 2, 4 } ); - assertEquals( 4, p.categoriesManyToMany.size() ); - checkIds( p.categoriesManyToMany, new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.categoriesWithDescManyToMany.size() ); - checkIds( p.categoriesWithDescManyToMany, new Integer[] { 1, 2, 4 } ); - assertEquals( 2, p.categoriesWithDescIdLt4ManyToMany.size() ); - checkIds( p.categoriesWithDescIdLt4ManyToMany, new Integer[] { 1, 2 } ); - } - ); - } - - private void checkIds(Set categories, Integer[] expectedIds) { - final Set expectedIdSet = new HashSet<>( Arrays.asList( expectedIds ) ); - for ( Category category : categories ) { - expectedIdSet.remove( category.id ); - } - assertTrue( expectedIdSet.isEmpty() ); - } - - @Entity(name = "Product") - public static class Product { - @Id - @GeneratedValue - private int id; - - @OneToMany(fetch = FetchType.EAGER) - @JoinColumn - private Set categoriesOneToMany = new HashSet<>(); - - @OneToMany(fetch = FetchType.EAGER) - @JoinColumn - @SQLRestriction( "description is not null" ) - private Set categoriesWithDescOneToMany = new HashSet<>(); - - @ManyToMany(fetch = FetchType.EAGER) - @JoinTable(name = "categoriesManyToMany") - private Set categoriesManyToMany = new HashSet<>(); - - @ManyToMany(fetch = FetchType.EAGER) - @JoinTable(name = "categoriesWithDescManyToMany", inverseJoinColumns = { @JoinColumn( name = "categoryId" )}) - @SQLRestriction( "description is not null" ) - private Set categoriesWithDescManyToMany = new HashSet<>(); - - @ManyToMany(fetch = FetchType.EAGER) - @JoinTable(name = "categoriesWithDescIdLt4MToM", inverseJoinColumns = { @JoinColumn( name = "categoryId" )}) - @SQLRestriction( "description is not null" ) - @SQLJoinTableRestriction( "categoryId < 4") - private Set categoriesWithDescIdLt4ManyToMany = new HashSet<>(); - } - - @Entity(name = "Category") - @Table(name = "CATEGORY") - @SQLRestriction( "inactive = 0") - public static class Category { - @Id - private int id; - - private String name; - - private String description; - - private int inactive; - } -} diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerToManyWhereUseClassWhereTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerToManyWhereUseClassWhereTest.java index 6a1d203a2c..c510ed1ebd 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerToManyWhereUseClassWhereTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/EagerToManyWhereUseClassWhereTest.java @@ -8,8 +8,15 @@ package org.hibernate.orm.test.where.annotations; import java.util.Arrays; import java.util.HashSet; -import java.util.Map; import java.util.Set; + +import org.hibernate.annotations.SQLJoinTableRestriction; +import org.hibernate.annotations.SQLRestriction; + +import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; +import org.hibernate.testing.orm.junit.JiraKey; +import org.junit.Test; + import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -20,14 +27,6 @@ import jakarta.persistence.ManyToMany; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; -import org.hibernate.annotations.SQLJoinTableRestriction; -import org.hibernate.annotations.SQLRestriction; -import org.hibernate.cfg.AvailableSettings; - -import org.hibernate.testing.TestForIssue; -import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; -import org.junit.Test; - import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -35,24 +34,17 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** - * Tests association collections with AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS = true - * * @author Gail Badner */ public class EagerToManyWhereUseClassWhereTest extends BaseNonConfigCoreFunctionalTestCase { @Override - protected Class[] getAnnotatedClasses() { + protected Class[] getAnnotatedClasses() { return new Class[] { Product.class, Category.class }; } - @Override - protected void addSettings(Map settings) { - settings.put( AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS, "true" ); - } - @Test - @TestForIssue( jiraKey = "HHH-13011" ) + @JiraKey("HHH-13011") public void testAssociatedWhereClause() { Product product = new Product(); diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/LazyToManyWhereDontUseClassWhereTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/LazyToManyWhereDontUseClassWhereTest.java deleted file mode 100644 index c39c092818..0000000000 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/LazyToManyWhereDontUseClassWhereTest.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * 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 . - */ -package org.hibernate.orm.test.where.annotations; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.annotations.SQLJoinTableRestriction; -import org.hibernate.annotations.SQLRestriction; -import org.hibernate.cfg.AvailableSettings; - -import org.hibernate.testing.TestForIssue; -import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; -import org.junit.Test; - -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -/** - * Tests association collections with AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS = false - * - * @author Gail Badner - */ -public class LazyToManyWhereDontUseClassWhereTest extends BaseNonConfigCoreFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Product.class, Category.class }; - } - - @Override - protected void addSettings(Map settings) { - settings.put( AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS, "false" ); - } - - @Test - @TestForIssue( jiraKey = "HHH-13011" ) - public void testAssociatedWhereClause() { - - Product product = new Product(); - Category flowers = new Category(); - flowers.id = 1; - flowers.name = "flowers"; - flowers.description = "FLOWERS"; - product.categoriesOneToMany.add( flowers ); - product.categoriesWithDescOneToMany.add( flowers ); - product.categoriesManyToMany.add( flowers ); - product.categoriesWithDescManyToMany.add( flowers ); - product.categoriesWithDescIdLt4ManyToMany.add( flowers ); - Category vegetables = new Category(); - vegetables.id = 2; - vegetables.name = "vegetables"; - vegetables.description = "VEGETABLES"; - product.categoriesOneToMany.add( vegetables ); - product.categoriesWithDescOneToMany.add( vegetables ); - product.categoriesManyToMany.add( vegetables ); - product.categoriesWithDescManyToMany.add( vegetables ); - product.categoriesWithDescIdLt4ManyToMany.add( vegetables ); - Category dogs = new Category(); - dogs.id = 3; - dogs.name = "dogs"; - dogs.description = null; - product.categoriesOneToMany.add( dogs ); - product.categoriesWithDescOneToMany.add( dogs ); - product.categoriesManyToMany.add( dogs ); - product.categoriesWithDescManyToMany.add( dogs ); - product.categoriesWithDescIdLt4ManyToMany.add( dogs ); - Category building = new Category(); - building.id = 4; - building.name = "building"; - building.description = "BUILDING"; - product.categoriesOneToMany.add( building ); - product.categoriesWithDescOneToMany.add( building ); - product.categoriesManyToMany.add( building ); - product.categoriesWithDescManyToMany.add( building ); - product.categoriesWithDescIdLt4ManyToMany.add( building ); - - doInHibernate( - this::sessionFactory, - session -> { - session.persist( flowers ); - session.persist( vegetables ); - session.persist( dogs ); - session.persist( building ); - session.persist( product ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Product p = session.get( Product.class, product.id ); - assertNotNull( p ); - assertEquals( 4, p.categoriesOneToMany.size() ); - checkIds( p.categoriesOneToMany, new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.categoriesWithDescOneToMany.size() ); - checkIds( p.categoriesWithDescOneToMany, new Integer[] { 1, 2, 4 } ); - assertEquals( 4, p.categoriesManyToMany.size() ); - checkIds( p.categoriesManyToMany, new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.categoriesWithDescManyToMany.size() ); - checkIds( p.categoriesWithDescManyToMany, new Integer[] { 1, 2, 4 } ); - assertEquals( 2, p.categoriesWithDescIdLt4ManyToMany.size() ); - checkIds( p.categoriesWithDescIdLt4ManyToMany, new Integer[] { 1, 2 } ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Category c = session.get( Category.class, flowers.id ); - assertNotNull( c ); - c.inactive = 1; - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Category c = session.get( Category.class, flowers.id ); - assertNull( c ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Product p = session.get( Product.class, product.id ); - assertNotNull( p ); - assertEquals( 4, p.categoriesOneToMany.size() ); - checkIds( p.categoriesOneToMany, new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.categoriesWithDescOneToMany.size() ); - checkIds( p.categoriesWithDescOneToMany, new Integer[] { 1, 2, 4 } ); - assertEquals( 4, p.categoriesManyToMany.size() ); - checkIds( p.categoriesManyToMany, new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.categoriesWithDescManyToMany.size() ); - checkIds( p.categoriesWithDescManyToMany, new Integer[] { 1, 2, 4 } ); - assertEquals( 2, p.categoriesWithDescIdLt4ManyToMany.size() ); - checkIds( p.categoriesWithDescIdLt4ManyToMany, new Integer[] { 1, 2 } ); - } - ); - } - - private void checkIds(Set categories, Integer[] expectedIds) { - final Set expectedIdSet = new HashSet<>( Arrays.asList( expectedIds ) ); - for ( Category category : categories ) { - expectedIdSet.remove( category.id ); - } - assertTrue( expectedIdSet.isEmpty() ); - } - - @Entity(name = "Product") - public static class Product { - @Id - @GeneratedValue - private int id; - - @OneToMany(fetch = FetchType.LAZY) - @JoinColumn - private Set categoriesOneToMany = new HashSet<>(); - - @OneToMany(fetch = FetchType.LAZY) - @JoinColumn - @SQLRestriction( "description is not null" ) - private Set categoriesWithDescOneToMany = new HashSet<>(); - - @ManyToMany(fetch = FetchType.LAZY) - @JoinTable(name = "categoriesManyToMany") - private Set categoriesManyToMany = new HashSet<>(); - - @ManyToMany(fetch = FetchType.LAZY) - @JoinTable(name = "categoriesWithDescManyToMany", inverseJoinColumns = { @JoinColumn( name = "categoryId" )}) - @SQLRestriction( "description is not null" ) - private Set categoriesWithDescManyToMany = new HashSet<>(); - - @ManyToMany(fetch = FetchType.LAZY) - @JoinTable(name = "categoriesWithDescIdLt4MToM", inverseJoinColumns = { @JoinColumn( name = "categoryId" )}) - @SQLRestriction( "description is not null" ) - @SQLJoinTableRestriction( "categoryId < 4") - private Set categoriesWithDescIdLt4ManyToMany = new HashSet<>(); - } - - @Entity(name = "Category") - @Table(name = "CATEGORY") - @SQLRestriction("inactive = 0") - public static class Category { - @Id - private int id; - - private String name; - - private String description; - - private int inactive; - } -} diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/LazyToManyWhereUseClassWhereTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/LazyToManyWhereUseClassWhereTest.java index 004f09de64..a8965ffd61 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/LazyToManyWhereUseClassWhereTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/where/annotations/LazyToManyWhereUseClassWhereTest.java @@ -8,8 +8,15 @@ package org.hibernate.orm.test.where.annotations; import java.util.Arrays; import java.util.HashSet; -import java.util.Map; import java.util.Set; + +import org.hibernate.annotations.SQLJoinTableRestriction; +import org.hibernate.annotations.SQLRestriction; + +import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; +import org.hibernate.testing.orm.junit.JiraKey; +import org.junit.Test; + import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -20,14 +27,6 @@ import jakarta.persistence.ManyToMany; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; -import org.hibernate.annotations.SQLJoinTableRestriction; -import org.hibernate.annotations.SQLRestriction; -import org.hibernate.cfg.AvailableSettings; - -import org.hibernate.testing.TestForIssue; -import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; -import org.junit.Test; - import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -35,24 +34,17 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** - * Tests association collections with AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS = true - * * @author Gail Badner */ public class LazyToManyWhereUseClassWhereTest extends BaseNonConfigCoreFunctionalTestCase { @Override - protected Class[] getAnnotatedClasses() { + protected Class[] getAnnotatedClasses() { return new Class[] { Product.class, Category.class }; } - @Override - protected void addSettings(Map settings) { - settings.put( AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS, "true" ); - } - @Test - @TestForIssue( jiraKey = "HHH-13011" ) + @JiraKey( "HHH-13011" ) public void testAssociatedWhereClause() { Product product = new Product(); diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/EagerToManyWhereDontUseClassWhereTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/EagerToManyWhereDontUseClassWhereTest.java deleted file mode 100644 index 46eeda5e42..0000000000 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/EagerToManyWhereDontUseClassWhereTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * 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 . - */ -package org.hibernate.orm.test.where.hbm; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.hibernate.cfg.AvailableSettings; - -import org.hibernate.testing.TestForIssue; -import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; -import org.junit.Test; - -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -/** - * Tests association collections with AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS = false - * - * @author Gail Badner - */ -public class EagerToManyWhereDontUseClassWhereTest extends BaseNonConfigCoreFunctionalTestCase { - - @Override - protected String getBaseForMappings() { - return "org/hibernate/orm/test/"; - } - - @Override - protected String[] getMappings() { - return new String[] { "where/hbm/EagerToManyWhere.hbm.xml" }; - } - - @Override - protected void addSettings(Map settings) { - settings.put( AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS, "false" ); - } - - @Test - @TestForIssue( jiraKey = "HHH-13011" ) - public void testAssociatedWhereClause() { - - Product product = new Product(); - Category flowers = new Category(); - flowers.setId( 1 ); - flowers.setName( "flowers" ); - flowers.setDescription( "FLOWERS" ); - product.getCategoriesOneToMany().add( flowers ); - product.getCategoriesWithDescOneToMany().add( flowers ); - product.getCategoriesManyToMany().add( flowers ); - product.getCategoriesWithDescManyToMany().add( flowers ); - product.getCategoriesWithDescIdLt4ManyToMany().add( flowers ); - Category vegetables = new Category(); - vegetables.setId( 2 ); - vegetables.setName( "vegetables" ); - vegetables.setDescription( "VEGETABLES" ); - product.getCategoriesOneToMany().add( vegetables ); - product.getCategoriesWithDescOneToMany().add( vegetables ); - product.getCategoriesManyToMany().add( vegetables ); - product.getCategoriesWithDescManyToMany().add( vegetables ); - product.getCategoriesWithDescIdLt4ManyToMany().add( vegetables ); - Category dogs = new Category(); - dogs.setId( 3 ); - dogs.setName( "dogs" ); - dogs.setDescription( null ); - product.getCategoriesOneToMany().add( dogs ); - product.getCategoriesWithDescOneToMany().add( dogs ); - product.getCategoriesManyToMany().add( dogs ); - product.getCategoriesWithDescManyToMany().add( dogs ); - product.getCategoriesWithDescIdLt4ManyToMany().add( dogs ); - Category building = new Category(); - building.setId( 4 ); - building.setName( "building" ); - building.setDescription( "BUILDING" ); - product.getCategoriesOneToMany().add( building ); - product.getCategoriesWithDescOneToMany().add( building ); - product.getCategoriesManyToMany().add( building ); - product.getCategoriesWithDescManyToMany().add( building ); - product.getCategoriesWithDescIdLt4ManyToMany().add( building ); - - doInHibernate( - this::sessionFactory, - session -> { - session.persist( flowers ); - session.persist( vegetables ); - session.persist( dogs ); - session.persist( building ); - session.persist( product ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Product p = session.get( Product.class, product.getId() ); - assertNotNull( p ); - assertEquals( 4, p.getCategoriesOneToMany().size() ); - checkIds( p.getCategoriesOneToMany(), new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.getCategoriesWithDescOneToMany().size() ); - checkIds( p.getCategoriesWithDescOneToMany(), new Integer[] { 1, 2, 4 } ); - assertEquals( 4, p.getCategoriesManyToMany().size() ); - checkIds( p.getCategoriesManyToMany(), new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.getCategoriesWithDescManyToMany().size() ); - checkIds( p.getCategoriesWithDescManyToMany(), new Integer[] { 1, 2, 4 } ); - assertEquals( 2, p.getCategoriesWithDescIdLt4ManyToMany().size() ); - checkIds( p.getCategoriesWithDescIdLt4ManyToMany(), new Integer[] { 1, 2 } ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Category c = session.get( Category.class, flowers.getId() ); - assertNotNull( c ); - c.setInactive( 1 ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Category c = session.get( Category.class, flowers.getId() ); - assertNull( c ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Product p = session.get( Product.class, product.getId() ); - assertNotNull( p ); - assertEquals( 4, p.getCategoriesOneToMany().size() ); - checkIds( p.getCategoriesOneToMany(), new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.getCategoriesWithDescOneToMany().size() ); - checkIds( p.getCategoriesWithDescOneToMany(), new Integer[] { 1, 2, 4 } ); - assertEquals( 4, p.getCategoriesManyToMany().size() ); - checkIds( p.getCategoriesManyToMany(), new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.getCategoriesWithDescManyToMany().size() ); - checkIds( p.getCategoriesWithDescManyToMany(), new Integer[] { 1, 2, 4 } ); - assertEquals( 2, p.getCategoriesWithDescIdLt4ManyToMany().size() ); - checkIds( p.getCategoriesWithDescIdLt4ManyToMany(), new Integer[] { 1, 2 } ); - } - ); - } - - private void checkIds(Set categories, Integer[] expectedIds) { - final Set expectedIdSet = new HashSet<>( Arrays.asList( expectedIds ) ); - for ( Category category : categories ) { - expectedIdSet.remove( category.getId() ); - } - assertTrue( expectedIdSet.isEmpty() ); - } -} diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/EagerToManyWhereUseClassWhereTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/EagerToManyWhereUseClassWhereTest.java index c89f82c8b6..189edfa711 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/EagerToManyWhereUseClassWhereTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/EagerToManyWhereUseClassWhereTest.java @@ -15,6 +15,7 @@ import org.hibernate.cfg.AvailableSettings; import org.hibernate.testing.TestForIssue; import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; +import org.hibernate.testing.orm.junit.JiraKey; import org.junit.Test; import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; @@ -24,8 +25,6 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** - * Tests association collections with AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS = true - * * @author Gail Badner */ public class EagerToManyWhereUseClassWhereTest extends BaseNonConfigCoreFunctionalTestCase { @@ -40,13 +39,8 @@ public class EagerToManyWhereUseClassWhereTest extends BaseNonConfigCoreFunction return new String[] { "where/hbm/EagerToManyWhere.hbm.xml" }; } - @Override - protected void addSettings(Map settings) { - settings.put( AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS, "true" ); - } - @Test - @TestForIssue( jiraKey = "HHH-13011" ) + @JiraKey( "HHH-13011" ) public void testAssociatedWhereClause() { Product product = new Product(); diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/LazyToManyWhereDontUseClassWhereTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/LazyToManyWhereDontUseClassWhereTest.java deleted file mode 100644 index e108423751..0000000000 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/LazyToManyWhereDontUseClassWhereTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * 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 . - */ -package org.hibernate.orm.test.where.hbm; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.hibernate.cfg.AvailableSettings; - -import org.hibernate.testing.TestForIssue; -import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; -import org.junit.Test; - -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -/** - * Tests association collections with AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS = false - * - * @author Gail Badner - */ -public class LazyToManyWhereDontUseClassWhereTest extends BaseNonConfigCoreFunctionalTestCase { - - @Override - protected String getBaseForMappings() { - return "org/hibernate/orm/test/"; - } - - @Override - protected String[] getMappings() { - return new String[] { "where/hbm/LazyToManyWhere.hbm.xml" }; - } - - @Override - protected void addSettings(Map settings) { - settings.put( AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS, "false" ); - } - - @Test - @TestForIssue( jiraKey = "HHH-13011" ) - public void testAssociatedWhereClause() { - - Product product = new Product(); - Category flowers = new Category(); - flowers.setId( 1 ); - flowers.setName( "flowers" ); - flowers.setDescription( "FLOWERS" ); - product.getCategoriesOneToMany().add( flowers ); - product.getCategoriesWithDescOneToMany().add( flowers ); - product.getCategoriesManyToMany().add( flowers ); - product.getCategoriesWithDescManyToMany().add( flowers ); - product.getCategoriesWithDescIdLt4ManyToMany().add( flowers ); - Category vegetables = new Category(); - vegetables.setId( 2 ); - vegetables.setName( "vegetables" ); - vegetables.setDescription( "VEGETABLES" ); - product.getCategoriesOneToMany().add( vegetables ); - product.getCategoriesWithDescOneToMany().add( vegetables ); - product.getCategoriesManyToMany().add( vegetables ); - product.getCategoriesWithDescManyToMany().add( vegetables ); - product.getCategoriesWithDescIdLt4ManyToMany().add( vegetables ); - Category dogs = new Category(); - dogs.setId( 3 ); - dogs.setName( "dogs" ); - dogs.setDescription( null ); - product.getCategoriesOneToMany().add( dogs ); - product.getCategoriesWithDescOneToMany().add( dogs ); - product.getCategoriesManyToMany().add( dogs ); - product.getCategoriesWithDescManyToMany().add( dogs ); - product.getCategoriesWithDescIdLt4ManyToMany().add( dogs ); - Category building = new Category(); - building.setId( 4 ); - building.setName( "building" ); - building.setDescription( "BUILDING" ); - product.getCategoriesOneToMany().add( building ); - product.getCategoriesWithDescOneToMany().add( building ); - product.getCategoriesManyToMany().add( building ); - product.getCategoriesWithDescManyToMany().add( building ); - product.getCategoriesWithDescIdLt4ManyToMany().add( building ); - - doInHibernate( - this::sessionFactory, - session -> { - session.persist( flowers ); - session.persist( vegetables ); - session.persist( dogs ); - session.persist( building ); - session.persist( product ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Product p = session.get( Product.class, product.getId() ); - assertNotNull( p ); - assertEquals( 4, p.getCategoriesOneToMany().size() ); - checkIds( p.getCategoriesOneToMany(), new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.getCategoriesWithDescOneToMany().size() ); - checkIds( p.getCategoriesWithDescOneToMany(), new Integer[] { 1, 2, 4 } ); - assertEquals( 4, p.getCategoriesManyToMany().size() ); - checkIds( p.getCategoriesManyToMany(), new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.getCategoriesWithDescManyToMany().size() ); - checkIds( p.getCategoriesWithDescManyToMany(), new Integer[] { 1, 2, 4 } ); - assertEquals( 2, p.getCategoriesWithDescIdLt4ManyToMany().size() ); - checkIds( p.getCategoriesWithDescIdLt4ManyToMany(), new Integer[] { 1, 2 } ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Category c = session.get( Category.class, flowers.getId() ); - assertNotNull( c ); - c.setInactive( 1 ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Category c = session.get( Category.class, flowers.getId() ); - assertNull( c ); - } - ); - - doInHibernate( - this::sessionFactory, - session -> { - Product p = session.get( Product.class, product.getId() ); - assertNotNull( p ); - assertEquals( 4, p.getCategoriesOneToMany().size() ); - checkIds( p.getCategoriesOneToMany(), new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.getCategoriesWithDescOneToMany().size() ); - checkIds( p.getCategoriesWithDescOneToMany(), new Integer[] { 1, 2, 4 } ); - assertEquals( 4, p.getCategoriesManyToMany().size() ); - checkIds( p.getCategoriesManyToMany(), new Integer[] { 1, 2, 3, 4 } ); - assertEquals( 3, p.getCategoriesWithDescManyToMany().size() ); - checkIds( p.getCategoriesWithDescManyToMany(), new Integer[] { 1, 2, 4 } ); - assertEquals( 2, p.getCategoriesWithDescIdLt4ManyToMany().size() ); - checkIds( p.getCategoriesWithDescIdLt4ManyToMany(), new Integer[] { 1, 2 } ); - } - ); - } - - private void checkIds(Set categories, Integer[] expectedIds) { - final Set expectedIdSet = new HashSet<>( Arrays.asList( expectedIds ) ); - for ( Category category : categories ) { - expectedIdSet.remove( category.getId() ); - } - assertTrue( expectedIdSet.isEmpty() ); - } -} diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/LazyToManyWhereUseClassWhereTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/LazyToManyWhereUseClassWhereTest.java index 7b07602b8c..064ef42209 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/LazyToManyWhereUseClassWhereTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/where/hbm/LazyToManyWhereUseClassWhereTest.java @@ -8,13 +8,10 @@ package org.hibernate.orm.test.where.hbm; import java.util.Arrays; import java.util.HashSet; -import java.util.Map; import java.util.Set; -import org.hibernate.cfg.AvailableSettings; - -import org.hibernate.testing.TestForIssue; import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; +import org.hibernate.testing.orm.junit.JiraKey; import org.junit.Test; import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; @@ -24,8 +21,6 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** - * Tests association collections with AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS = true - * * @author Gail Badner */ public class LazyToManyWhereUseClassWhereTest extends BaseNonConfigCoreFunctionalTestCase { @@ -40,13 +35,8 @@ public class LazyToManyWhereUseClassWhereTest extends BaseNonConfigCoreFunctiona return new String[] { "where/hbm/LazyToManyWhere.hbm.xml" }; } - @Override - protected void addSettings(Map settings) { - settings.put( AvailableSettings.USE_ENTITY_WHERE_CLAUSE_FOR_COLLECTIONS, "true" ); - } - @Test - @TestForIssue( jiraKey = "HHH-13011" ) + @JiraKey( "HHH-13011" ) public void testAssociatedWhereClause() { Product product = new Product();