Skip to content

Commit 74a0403

Browse files
committed
HHH-20339 Remove unreachable CompositeSqmPathSource throw in resolveMappingExpressible
1 parent 8127d0c commit 74a0403

2 files changed

Lines changed: 146 additions & 4 deletions

File tree

hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -575,10 +575,6 @@ else if ( sqmExpressible instanceof SqmFieldLiteral<?> sqmFieldLiteral ) {
575575
return getTypeConfiguration().getBasicTypeForJavaType( sqmFieldLiteral.getJavaType() );
576576
}
577577

578-
else if ( sqmExpressible instanceof CompositeSqmPathSource ) {
579-
throw new UnsupportedOperationException( "Resolution of embedded-valued SqmExpressible nodes not yet implemented" );
580-
}
581-
582578
else if ( sqmExpressible instanceof AnonymousTupleSqmPathSource<?> anonymousTupleSqmPathSource ) {
583579
return resolveMappingExpressible(
584580
resolveExpressible( anonymousTupleSqmPathSource.getPathType() ),
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.query.hql;
6+
7+
import org.hibernate.testing.orm.junit.DomainModel;
8+
import org.hibernate.testing.orm.junit.Jira;
9+
import org.hibernate.testing.orm.junit.SessionFactory;
10+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
11+
import org.junit.jupiter.api.AfterAll;
12+
import org.junit.jupiter.api.BeforeAll;
13+
import org.junit.jupiter.api.Test;
14+
15+
import jakarta.persistence.Embeddable;
16+
import jakarta.persistence.Embedded;
17+
import jakarta.persistence.Entity;
18+
import jakarta.persistence.Id;
19+
import jakarta.persistence.MappedSuperclass;
20+
21+
import static org.assertj.core.api.Assertions.assertThat;
22+
23+
/**
24+
* @author Marco Belladelli
25+
*/
26+
@DomainModel(annotatedClasses = {
27+
MappedSuperclassEmbeddableAsParameterTest.ConcreteEntity.class
28+
})
29+
@SessionFactory
30+
@Jira("https://hibernate.atlassian.net/browse/HHH-20339")
31+
public class MappedSuperclassEmbeddableAsParameterTest {
32+
33+
@BeforeAll
34+
public void setUp(SessionFactoryScope scope) {
35+
scope.inTransaction( session -> {
36+
var entity = new ConcreteEntity();
37+
entity.setId( 1L );
38+
entity.setIdent( new MyEmbeddable( "code_1", "desc_1" ) );
39+
entity.setName( "first" );
40+
session.persist( entity );
41+
42+
var entity2 = new ConcreteEntity();
43+
entity2.setId( 2L );
44+
entity2.setIdent( new MyEmbeddable( "code_2", "desc_2" ) );
45+
entity2.setName( "second" );
46+
session.persist( entity2 );
47+
} );
48+
}
49+
50+
@AfterAll
51+
public void tearDown(SessionFactoryScope scope) {
52+
scope.getSessionFactory().getSchemaManager().truncateMappedObjects();
53+
}
54+
55+
@Test
56+
public void testEmbeddableParameterOnConcreteEntity(SessionFactoryScope scope) {
57+
scope.inTransaction( session -> {
58+
var results = session.createQuery(
59+
"select e from ConcreteEntity e where e.ident = :ident",
60+
ConcreteEntity.class
61+
).setParameter( "ident", new MyEmbeddable( "code_1", "desc_1" ) ).getResultList();
62+
assertThat( results ).hasSize( 1 );
63+
assertThat( results.get( 0 ).getName() ).isEqualTo( "first" );
64+
} );
65+
}
66+
67+
@Test
68+
public void testEmbeddableParameterOnMappedSuperclass(SessionFactoryScope scope) {
69+
scope.inTransaction( session -> {
70+
var results = session.createQuery(
71+
"select e from " + MySuperclass.class.getName() + " e where e.ident = :ident",
72+
MySuperclass.class
73+
).setParameter( "ident", new MyEmbeddable( "code_1", "desc_1" ) ).getResultList();
74+
assertThat( results ).hasSize( 1 );
75+
assertThat( ( (ConcreteEntity) results.get( 0 ) ).getName() ).isEqualTo( "first" );
76+
} );
77+
}
78+
79+
@Embeddable
80+
public static class MyEmbeddable {
81+
private String code;
82+
private String description;
83+
84+
public MyEmbeddable() {
85+
}
86+
87+
public MyEmbeddable(String code, String description) {
88+
this.code = code;
89+
this.description = description;
90+
}
91+
92+
public String getCode() {
93+
return code;
94+
}
95+
96+
public void setCode(String code) {
97+
this.code = code;
98+
}
99+
100+
public String getDescription() {
101+
return description;
102+
}
103+
104+
public void setDescription(String description) {
105+
this.description = description;
106+
}
107+
}
108+
109+
@MappedSuperclass
110+
public static abstract class MySuperclass {
111+
@Embedded
112+
private MyEmbeddable ident;
113+
114+
public MyEmbeddable getIdent() {
115+
return ident;
116+
}
117+
118+
public void setIdent(MyEmbeddable ident) {
119+
this.ident = ident;
120+
}
121+
}
122+
123+
@Entity(name = "ConcreteEntity")
124+
public static class ConcreteEntity extends MySuperclass {
125+
@Id
126+
private Long id;
127+
128+
private String name;
129+
130+
public Long getId() {
131+
return id;
132+
}
133+
134+
public void setId(Long id) {
135+
this.id = id;
136+
}
137+
138+
public String getName() {
139+
return name;
140+
}
141+
142+
public void setName(String name) {
143+
this.name = name;
144+
}
145+
}
146+
}

0 commit comments

Comments
 (0)