From 255cf3e301517c19f7425acbbb1d9c4fc31d4dcb Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Thu, 10 Nov 2022 11:52:01 +0100 Subject: [PATCH] HHH-15658 Add test for issue --- .../sql/EmbeddableAndNativeQueryTest.java | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 hibernate-core/src/test/java/org/hibernate/orm/test/query/sql/EmbeddableAndNativeQueryTest.java diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/query/sql/EmbeddableAndNativeQueryTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/query/sql/EmbeddableAndNativeQueryTest.java new file mode 100644 index 0000000000..4982be575e --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/query/sql/EmbeddableAndNativeQueryTest.java @@ -0,0 +1,105 @@ +/* + * 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.query.sql; + +import java.util.List; + +import org.hibernate.testing.TestForIssue; +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.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import jakarta.persistence.Embeddable; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +@DomainModel( + annotatedClasses = EmbeddableAndNativeQueryTest.Person.class +) +@SessionFactory +@TestForIssue(jiraKey = "HHH-15658") +public class EmbeddableAndNativeQueryTest { + + @BeforeEach + public void setUp(SessionFactoryScope scope) { + scope.inTransaction( + session -> { + Address address = new Address( "Milan", "Italy", "Italy", "20133" ); + Person person = new Person( 1, address ); + + Address address2 = new Address( "Garbagnate", "Italy", "Italy", "20024" ); + Person person2 = new Person( 2, address2 ); + + session.persist( person ); + session.persist( person2 ); + } + ); + } + + @AfterEach + public void tearDown(SessionFactoryScope scope) { + scope.inTransaction( + session -> + session.createMutationQuery( "delete from Person" ).executeUpdate() + ); + } + + @Test + public void testSelect(SessionFactoryScope scope) { + scope.inTransaction( + session -> { + List people = session.createNativeQuery( + "select {p.*} from Person p", + Person.class, + "p" + ).list(); + + assertThat( people.size() ).isEqualTo( 2 ); + } + ); + } + + @Entity(name = "Person") + public static class Person { + @Id + private Integer id; + + private Address address; + + public Person() { + } + + public Person(Integer id, Address address) { + this.id = id; + this.address = address; + } + } + + @Embeddable + public static class Address { + private String city; + private String state; + private String country; + + private String postcode; + + public Address() { + } + + public Address(String city, String state, String country, String postcode) { + this.city = city; + this.state = state; + this.country = country; + this.postcode = postcode; + } + } +}