# Does Hibernate Criteria supports query: select ...from (select ...)

**URL:** <https://discourse.hibernate.org/t/does-hibernate-criteria-supports-query-select-from-select/11634>\
**Category:** Hibernate ORM\
**Created:** [July 9, 2025, 3:55pm UTC](https://discourse.hibernate.org/t/does-hibernate-criteria-supports-query-select-from-select/11634 "2025-07-09T15:55:33Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Amr\_Amara](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/amr_amara/32/3902_2.png) [@Amr\_Amara](https://discourse.hibernate.org/u/Amr_Amara)\
**Post date:** [July 9, 2025, 3:55pm UTC](https://discourse.hibernate.org/t/does-hibernate-criteria-supports-query-select-from-select/11634/1 "2025-07-09T15:55:33Z")

</div>

SELECT result.id, s1\_0.field1,  
s1\_0.field2,  
s1\_0.field3,  
s1\_0.field4  
FROM (  
SELECT i1\_0.id, i1\_0.foreign\_fk  
FROM table1 i1\_0  
) result  
LEFT JOIN table2 s1\_0 ON s1\_0.id = result.foreign\_fk

I am using Hibernate 6.6.13.Final. When I try to convert this query into Hibernate JPA Criteria API, it does not work.

Does the JPA Criteria API support this type of query (subquery in the FROM clause and join)?

---

<div class="post-metadata">

**Author:** ![beikov](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/beikov/32/258_2.png) [@beikov](https://discourse.hibernate.org/u/beikov)\
**Post date:** [July 10, 2025, 3:43pm UTC](https://discourse.hibernate.org/t/does-hibernate-criteria-supports-query-select-from-select/11634/2 "2025-07-10T15:43:39Z")

</div>

Hibernate ORM JPA Criteria extensions do support this, but unfortunately, the documentation for this part was not yet written: [Hibernate ORM User Guide](https://docs.jboss.org/hibernate/orm/6.6/userguide/html_single/Hibernate_User_Guide.html#criteria-extensions)

You will need to define the subquery and then pass it to `from`:

```java
final JpaCriteriaQuery<Tuple> cteSubquery = cb.createTupleQuery();
JpaSubQuery<Tuple> data1 = cteSubquery.subquery(Tuple.class);
final JpaRoot<Invoice> root = cteSubquery .from(Invoice.class);
data1.multiselect(
	root.get(Invoice_.id).alias("id"),
	root.get(Invoice_.isPToPay).alias("isPToPay"),
	root.get(Invoice_.invoiceNumber).alias("invoiceNumber"),
	root.get(Invoice_.supplier).get(Supplier_.id).alias("supplierFk"));
		
JpaRoot<Tuple> subqueryRoot = cteSubquery.from(data1);
JpaEntityJoin<Supplier> supplier = subqueryRoot.join(Supplier.class, JoinType.LEFT);
supplier.on(supplier.get(Supplier_.id).equalsTo(subqueryRoot.get("supplierFk")));

```

---

<div class="post-metadata">

**Author:** ![Amr\_Amara](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/amr_amara/32/3902_2.png) [@Amr\_Amara](https://discourse.hibernate.org/u/Amr_Amara)\
**Post date:** [July 10, 2025, 6:57pm UTC](https://discourse.hibernate.org/t/does-hibernate-criteria-supports-query-select-from-select/11634/3 "2025-07-10T18:57:02Z")

</div>

```auto
it does not work for this line 
**JpaEntityJoin<Supplier> supplier = subqueryRoot.join(Supplier.class, JoinType.LEFT);**
Since Tuple from a subquery doesn’t have mapped relationships, you can’t directly join it to Supplier.

```

---

<div class="post-metadata">

**Author:** ![beikov](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/beikov/32/258_2.png) [@beikov](https://discourse.hibernate.org/u/beikov)\
**Post date:** [July 14, 2025, 1:17pm UTC](https://discourse.hibernate.org/t/does-hibernate-criteria-supports-query-select-from-select/11634/4 "2025-07-14T13:17:45Z")

</div>

The code I posted uses an entity join, not a relationship join, because like you noticed, a subquery can’t have relationships.

Do you get an error? If so, please post the stack trace.
