Skip to content

Commit 4f20888

Browse files
committed
HHH-7216 'java.lang.IllegalStateException: No supertype found' thrown on query with COUNT aggregate function
1 parent 858c683 commit 4f20888

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

hibernate-entitymanager/src/main/java/org/hibernate/jpa/criteria/expression/function/AggregationFunction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ protected void renderArguments(StringBuilder buffer, RenderingContext renderingC
115115
Expression argExpr = argExprs.get(0);
116116
if (argExpr instanceof Root<?>) {
117117
Root<?> root = (Root<?>)argExpr;
118-
if (root.getModel().getIdType() != null) {
118+
if (!root.getModel().hasSingleIdAttribute()) {
119119
buffer.append('*');
120120
return;
121121
}

hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/criteria/idclass/IdClassPredicateTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import javax.persistence.EntityManager;
2929
import javax.persistence.criteria.CriteriaBuilder;
3030
import javax.persistence.criteria.CriteriaQuery;
31+
import javax.persistence.criteria.Expression;
3132
import javax.persistence.criteria.Predicate;
3233
import javax.persistence.criteria.Root;
3334

@@ -143,6 +144,37 @@ public void cleanupTestData() {
143144
em.close();
144145
}
145146

147+
@Test
148+
public void testCountIdClassAttributes(){
149+
EntityManager em = getOrCreateEntityManager();
150+
em.getTransaction().begin();
151+
CriteriaBuilder cb = em.getCriteriaBuilder();
152+
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
153+
Root<Widget> path = cq.from(Widget.class);
154+
Expression<Long> countSelection = cb.count(path);
155+
cq.select(countSelection);
156+
Long count = em.createQuery(cq).getSingleResult();
157+
// // Packaging arguments for use in query.
158+
// List<String> divisions = new ArrayList<String>( );
159+
// divisions.add( "NA" );
160+
// divisions.add( "EU" );
161+
//
162+
// // Building the query.
163+
// CriteriaBuilder criteria = em.getCriteriaBuilder( );
164+
// CriteriaQuery<Widget> query = criteria.createQuery( Widget.class );
165+
// Root<Widget> root = query.from( Widget.class );
166+
//
167+
// Predicate predicate = root.get( "division" ).in( divisions );
168+
// query.where( predicate );
169+
//
170+
// // Retrieving query.;
171+
// List<Widget> widgets = em.createQuery( query ).getResultList( );
172+
// Assert.assertEquals( 4, widgets.size() );
173+
174+
em.getTransaction().commit();
175+
em.close();
176+
}
177+
146178

147179
@Test
148180
public void testDeclaredIdClassAttributes( ) {

0 commit comments

Comments
 (0)