Skip to content

Commit 7612f8c

Browse files
committed
HHH-8847 - Exception thrown when trying to select a treated property
(cherry picked from commit 4132a42)
1 parent 823bf5e commit 7612f8c

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

hibernate-entitymanager/src/main/java/org/hibernate/jpa/criteria/path/RootImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,14 @@ public String getAlias() {
116116

117117
@Override
118118
public void prepareAlias(RenderingContext renderingContext) {
119-
// do nothing...
119+
// NOTE : we call `original#prepareAlias` here and during render
120+
// since in some cases only one or the other will be called
121+
original.prepareAlias( renderingContext );
120122
}
121123

122124
@Override
123125
public String render(RenderingContext renderingContext) {
124-
original.prepareAlias(renderingContext);
126+
original.prepareAlias( renderingContext );
125127
return getTreatFragment();
126128
}
127129

hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/criteria/TreatKeywordTest.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
import org.hibernate.jpa.test.metamodel.Thing;
1818
import org.hibernate.jpa.test.metamodel.ThingWithQuantity;
1919
import org.hibernate.jpa.test.metamodel.ThingWithQuantity_;
20-
import org.hibernate.testing.TestForIssue;
2120

21+
import org.hibernate.testing.TestForIssue;
2222
import org.junit.Assert;
2323
import org.junit.Test;
2424

@@ -200,6 +200,17 @@ public void treatRootReturnSuperclass() {
200200
em.close();
201201
}
202202

203+
@Test
204+
public void testSelectSubclassPropertyFromDowncast() {
205+
EntityManager em = getOrCreateEntityManager();
206+
CriteriaBuilder builder = em.getCriteriaBuilder();
207+
CriteriaQuery<Integer> criteria = builder.createQuery( Integer.class );
208+
Root<Thing> root = criteria.from( Thing.class );
209+
Root<ThingWithQuantity> subroot = builder.treat( root, ThingWithQuantity.class );
210+
criteria.select( subroot.<Integer>get( "quantity" ) );
211+
em.createQuery( criteria ).getResultList();
212+
em.close();
213+
}
203214

204215

205216
}

0 commit comments

Comments
 (0)