HHH-18357 Add test for issue

This commit is contained in:
Marco Belladelli 2024-07-10 09:45:29 +02:00
parent 1aa7db6a0a
commit f4297a0020
1 changed files with 84 additions and 0 deletions

View File

@ -37,10 +37,13 @@ import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.Inheritance; import jakarta.persistence.Inheritance;
import jakarta.persistence.InheritanceType; import jakarta.persistence.InheritanceType;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.MappedSuperclass; import jakarta.persistence.MappedSuperclass;
import jakarta.persistence.OneToMany;
import jakarta.persistence.SequenceGenerator; import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Tuple; import jakarta.persistence.Tuple;
import jakarta.persistence.TypedQuery; import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Root; import jakarta.persistence.criteria.Root;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
@ -55,6 +58,10 @@ import static org.junit.jupiter.api.Assertions.fail;
CountQueryTests.LogSupport.class, CountQueryTests.LogSupport.class,
CountQueryTests.Contract.class, CountQueryTests.Contract.class,
CountQueryTests.SimpleDto.class, CountQueryTests.SimpleDto.class,
CountQueryTests.BaseAttribs.class,
CountQueryTests.IdBased.class,
CountQueryTests.ParentEntity.class,
CountQueryTests.ChildEntity.class,
} }
) )
@SessionFactory @SessionFactory
@ -240,6 +247,22 @@ public class CountQueryTests {
} ); } );
} }
@Test
@Jira( "https://hibernate.atlassian.net/browse/HHH-18357" )
public void testJoinedEntityPath(SessionFactoryScope scope) {
scope.inTransaction( session -> {
final HibernateCriteriaBuilder cb = session.getCriteriaBuilder();
verifyCount( session, cb.createQuery(
"select c.id, c.parent from ChildEntity c",
Tuple.class
) );
verifyCount( session, cb.createQuery(
"select distinct c.id, c.parent from ChildEntity c",
Tuple.class
) );
} );
}
@BeforeEach @BeforeEach
public void prepareTestData(SessionFactoryScope scope) { public void prepareTestData(SessionFactoryScope scope) {
scope.inTransaction( (session) -> { scope.inTransaction( (session) -> {
@ -313,6 +336,15 @@ public class CountQueryTests {
session.persist( c4 ); session.persist( c4 );
session.persist( c8 ); session.persist( c8 );
session.persist( c7 ); session.persist( c7 );
final ParentEntity p1 = new ParentEntity( "parent_1", 1L );
final ParentEntity p2 = new ParentEntity( "parent_2", 2L );
final ChildEntity c1 = new ChildEntity( "child_1", 1L, p1 );
final ChildEntity c2 = new ChildEntity( "child_2", 2L, p2 );
session.persist( p1 );
session.persist( p2 );
session.persist( c1 );
session.persist( c2 );
} ); } );
} }
@ -327,6 +359,8 @@ public class CountQueryTests {
scope.inTransaction( (session) -> { scope.inTransaction( (session) -> {
session.createMutationQuery( "update Contact set alternativeContact = null" ).executeUpdate(); session.createMutationQuery( "update Contact set alternativeContact = null" ).executeUpdate();
session.createMutationQuery( "delete Contact" ).executeUpdate(); session.createMutationQuery( "delete Contact" ).executeUpdate();
session.createMutationQuery( "delete ChildEntity" ).executeUpdate();
session.createMutationQuery( "delete ParentEntity" ).executeUpdate();
} ); } );
} }
@ -356,4 +390,54 @@ public class CountQueryTests {
this.name = name; this.name = name;
} }
} }
@MappedSuperclass
static class BaseAttribs {
private String description;
public BaseAttribs() {
}
public BaseAttribs(String description) {
this.description = description;
}
}
@MappedSuperclass
static class IdBased extends BaseAttribs {
@Id
private Long id;
public IdBased() {
}
public IdBased(String description, Long id) {
super( description );
this.id = id;
}
}
@Entity( name = "ParentEntity" )
static class ParentEntity extends IdBased {
public ParentEntity() {
}
public ParentEntity(String description, Long id) {
super( description, id );
}
}
@Entity( name = "ChildEntity" )
static class ChildEntity extends IdBased {
@ManyToOne
private ParentEntity parent;
public ChildEntity() {
}
public ChildEntity(String description, Long id, ParentEntity parent) {
super( description, id );
this.parent = parent;
}
}
} }