From 58b495ae1bae88acd73f899625a4c970647a52e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Nowak?= Date: Thu, 8 Aug 2024 17:26:15 +0200 Subject: [PATCH 1/3] Bug reproduction --- orm/hibernate-orm-6/pom.xml | 6 +-- .../hibernate/bugs/ToOneJoinFetchTest.java | 47 +++++++++++++++++++ .../java/org/hibernate/entities/AEntity.java | 23 +++++++++ .../java/org/hibernate/entities/B1Entity.java | 9 ++++ .../java/org/hibernate/entities/B2Entity.java | 9 ++++ .../org/hibernate/entities/BaseBEntity.java | 24 ++++++++++ .../java/org/hibernate/entities/CEntity.java | 23 +++++++++ 7 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/ToOneJoinFetchTest.java create mode 100644 orm/hibernate-orm-6/src/test/java/org/hibernate/entities/AEntity.java create mode 100644 orm/hibernate-orm-6/src/test/java/org/hibernate/entities/B1Entity.java create mode 100644 orm/hibernate-orm-6/src/test/java/org/hibernate/entities/B2Entity.java create mode 100644 orm/hibernate-orm-6/src/test/java/org/hibernate/entities/BaseBEntity.java create mode 100644 orm/hibernate-orm-6/src/test/java/org/hibernate/entities/CEntity.java diff --git a/orm/hibernate-orm-6/pom.xml b/orm/hibernate-orm-6/pom.xml index 39a4b4c8..9536e0c6 100644 --- a/orm/hibernate-orm-6/pom.xml +++ b/orm/hibernate-orm-6/pom.xml @@ -10,7 +10,7 @@ 2.3.230 4.13.2 - 6.5.2.Final + 6.6.0.CR1 @@ -54,8 +54,8 @@ maven-compiler-plugin 3.13.0 - 11 - 11 + 17 + 17 diff --git a/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/ToOneJoinFetchTest.java b/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/ToOneJoinFetchTest.java new file mode 100644 index 00000000..11b6d5df --- /dev/null +++ b/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/ToOneJoinFetchTest.java @@ -0,0 +1,47 @@ +package org.hibernate.bugs; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.EntityManagerFactory; +import jakarta.persistence.Persistence; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class ToOneJoinFetchTest { + + private EntityManagerFactory entityManagerFactory; + + @Before + public void init() { + entityManagerFactory = Persistence.createEntityManagerFactory("templatePU"); + } + + @After + public void destroy() { + entityManagerFactory.close(); + } + + @Test + public void testToOneAttributeJoinFetch() throws Exception { + EntityManager entityManager = entityManagerFactory.createEntityManager(); + entityManager.getTransaction().begin(); + + //language=HQL + var hql = """ + SELECT a_entity FROM org.hibernate.entities.AEntity a_entity + LEFT JOIN FETCH a_entity.b_entity b_entity + LEFT JOIN FETCH b_entity.c_entities c_entities + """; + + var query = entityManager.createQuery(hql, List.class); + var res = query.getResultList(); + + assertEquals(0, res.size()); + entityManager.getTransaction().commit(); + entityManager.close(); + } +} diff --git a/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/AEntity.java b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/AEntity.java new file mode 100644 index 00000000..8d60ca0f --- /dev/null +++ b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/AEntity.java @@ -0,0 +1,23 @@ +package org.hibernate.entities; + +import jakarta.persistence.*; + +import static jakarta.persistence.GenerationType.IDENTITY; + +@Entity +@Table(name = "a_entities") +public class AEntity { + + @Id + @Column(name = "id") + @GeneratedValue(strategy = IDENTITY) + private Long id; + + @OneToOne + @JoinColumn(name = "b_entity_id", updatable = false, insertable = false) + private B2Entity b_entity; // default customer => owner + + @Column(name = "b_entity_id") + private Long b_entity_id; + +} diff --git a/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/B1Entity.java b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/B1Entity.java new file mode 100644 index 00000000..b4c51a4d --- /dev/null +++ b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/B1Entity.java @@ -0,0 +1,9 @@ +package org.hibernate.entities; + +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name = "b_entities") +public class B1Entity extends BaseBEntity { +} diff --git a/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/B2Entity.java b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/B2Entity.java new file mode 100644 index 00000000..c36d475c --- /dev/null +++ b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/B2Entity.java @@ -0,0 +1,9 @@ +package org.hibernate.entities; + +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name = "b_entities") +public class B2Entity extends BaseBEntity { +} \ No newline at end of file diff --git a/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/BaseBEntity.java b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/BaseBEntity.java new file mode 100644 index 00000000..6dbade45 --- /dev/null +++ b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/BaseBEntity.java @@ -0,0 +1,24 @@ +package org.hibernate.entities; + +import jakarta.persistence.*; + +import java.util.LinkedHashSet; +import java.util.Set; + +import static jakarta.persistence.GenerationType.IDENTITY; + +/** + * Common customer items useful in all contexts where a customer is used. + */ +@MappedSuperclass +public class BaseBEntity { + + @Id + @Column(name = "id") + @GeneratedValue(strategy = IDENTITY) + private Long id; + + @OneToMany(mappedBy = "b_entity") + private Set c_entities = new LinkedHashSet<>(); + +} diff --git a/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/CEntity.java b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/CEntity.java new file mode 100644 index 00000000..f6f1235b --- /dev/null +++ b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/CEntity.java @@ -0,0 +1,23 @@ +package org.hibernate.entities; + +import jakarta.persistence.*; + +import static jakarta.persistence.GenerationType.IDENTITY; + +@Entity +@Table(name = "c_entities") +public class CEntity { + + @Id + @Column(name = "id") + @GeneratedValue(strategy = IDENTITY) + private Long id; + + @Column(name = "b_id") + private Long bEntityId; + + @ManyToOne + @JoinColumn(name = "b_id", updatable = false, insertable = false) + private B1Entity b_entity; + +} \ No newline at end of file From 86b4261b440e185688a0c6883971350296c4cc5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Nowak?= Date: Thu, 8 Aug 2024 17:57:47 +0200 Subject: [PATCH 2/3] remove comment --- .../src/test/java/org/hibernate/entities/BaseBEntity.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/BaseBEntity.java b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/BaseBEntity.java index 6dbade45..5ec00f49 100644 --- a/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/BaseBEntity.java +++ b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/BaseBEntity.java @@ -7,9 +7,6 @@ import static jakarta.persistence.GenerationType.IDENTITY; -/** - * Common customer items useful in all contexts where a customer is used. - */ @MappedSuperclass public class BaseBEntity { From cd895a85dedde2b8ed6f99cd1f8dcace9ae9e499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Nowak?= Date: Thu, 8 Aug 2024 17:58:35 +0200 Subject: [PATCH 3/3] remove comment --- .../src/test/java/org/hibernate/entities/AEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/AEntity.java b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/AEntity.java index 8d60ca0f..8f024289 100644 --- a/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/AEntity.java +++ b/orm/hibernate-orm-6/src/test/java/org/hibernate/entities/AEntity.java @@ -15,7 +15,7 @@ public class AEntity { @OneToOne @JoinColumn(name = "b_entity_id", updatable = false, insertable = false) - private B2Entity b_entity; // default customer => owner + private B2Entity b_entity; @Column(name = "b_entity_id") private Long b_entity_id;