From 69dd220433a6d4f00ec77a3ac73a5b249335c820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20Laleve=CC=81e?= Date: Fri, 28 Jun 2024 19:46:02 +0200 Subject: [PATCH] reproducer of hhh-18236 --- .../java/org/hibernate/orm/test/jpa/Book.java | 36 +++++++++++++++++++ .../org/hibernate/orm/test/jpa/BookType.java | 6 ++++ .../org/hibernate/orm/test/jpa/SubBook.java | 24 +++++++++++++ .../orm/test/jpa/query/QueryTest.java | 26 +++++++++++++- 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 hibernate-core/src/test/java/org/hibernate/orm/test/jpa/Book.java create mode 100644 hibernate-core/src/test/java/org/hibernate/orm/test/jpa/BookType.java create mode 100644 hibernate-core/src/test/java/org/hibernate/orm/test/jpa/SubBook.java diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/Book.java b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/Book.java new file mode 100644 index 0000000000..4a7caf7383 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/Book.java @@ -0,0 +1,36 @@ +package org.hibernate.orm.test.jpa; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorColumn; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.Id; +import jakarta.persistence.Inheritance; +import jakarta.persistence.InheritanceType; +import org.hibernate.annotations.DynamicInsert; + +@Entity +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +@DiscriminatorColumn(name="TYPE_BOOK") +@DiscriminatorValue("MAIN") +@DynamicInsert +public class Book { + @Id + public String isbn; + + public String title; + + @Enumerated(EnumType.STRING) + @Column(name = "TYPE_BOOK", insertable = false, updatable = false, nullable = false) + protected BookType bookType; + + public Book() { + } + + public Book(String isbn, String title) { + this.isbn = isbn; + this.title = title; + } +} \ No newline at end of file diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/BookType.java b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/BookType.java new file mode 100644 index 0000000000..a91048362c --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/BookType.java @@ -0,0 +1,6 @@ +package org.hibernate.orm.test.jpa; + +public enum BookType { + MAIN, + SUB +} diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/SubBook.java b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/SubBook.java new file mode 100644 index 0000000000..0249a27481 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/SubBook.java @@ -0,0 +1,24 @@ +package org.hibernate.orm.test.jpa; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import org.hibernate.annotations.DynamicInsert; + +@Entity +@DiscriminatorValue("SUB") +@DynamicInsert +public class SubBook extends Book { + + @Column + public String subdata; + + public SubBook() { + } + + public SubBook(String isbn, String title, String subdata) { + this.isbn = isbn; + this.title = title; + this.subdata = subdata; + } +} diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/query/QueryTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/query/QueryTest.java index 44e3b0e069..06a797f5b2 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/query/QueryTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/query/QueryTest.java @@ -32,8 +32,10 @@ import org.hibernate.dialect.PostgreSQLDialect; import org.hibernate.dialect.PostgresPlusDialect; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.orm.test.jpa.BaseEntityManagerFunctionalTestCase; +import org.hibernate.orm.test.jpa.Book; import org.hibernate.orm.test.jpa.Distributor; import org.hibernate.orm.test.jpa.Item; +import org.hibernate.orm.test.jpa.SubBook; import org.hibernate.orm.test.jpa.Wallet; import org.hibernate.stat.Statistics; @@ -64,7 +66,9 @@ public class QueryTest extends BaseEntityManagerFunctionalTestCase { Distributor.class, Wallet.class, Employee.class, - Contractor.class + Contractor.class, + Book.class, + SubBook.class, }; } @@ -1582,4 +1586,24 @@ public class QueryTest extends BaseEntityManagerFunctionalTestCase { entityManager.close(); } } + + @Test + @TestForIssue(jiraKey = "HHH-18236") + public void test18236() { + EntityManager em = getOrCreateEntityManager(); + try { + em.getTransaction().begin(); + em.persist( new Book("9781932394153", "Hibernate in Action") ); + em.flush(); + + List results = em.createNativeQuery("select b.* from book b", Book.class).getResultList(); + assertEquals(1, results.size()); + } + finally { + em.getTransaction().rollback(); + em.close(); + } + + } + }