Java 与hibernate关联的子查询
有人知道是否可以像下面的查询那样在关联中使用子查询吗Java 与hibernate关联的子查询,java,hibernate,jpa,hql,Java,Hibernate,Jpa,Hql,有人知道是否可以像下面的查询那样在关联中使用子查询吗 SELECT l, o FROM User u INNER JOIN u.licenses l LEFT JOIN l.orders o WITH o.id = ( SELECT MAX(lastOrder.id) FROM Order lastOrder WHERE lastOrder.license = l ) WHE
SELECT l, o
FROM User u
INNER JOIN u.licenses l
LEFT JOIN l.orders o
WITH o.id = (
SELECT MAX(lastOrder.id)
FROM Order lastOrder
WHERE lastOrder.license = l
)
WHERE u.idtPerson = :idtPerson
AND l.statusCode != 3
我找到了这个解决办法
SELECT l, o
FROM User u
INNER JOIN u.licenses l
LEFT JOIN l.orders o
WHERE u.idtPerson = :idtPerson
AND l.statusCode != 3
AND (
o.id IS NULL
OR o.id = (
SELECT MAX(lastOrder.id)
FROM Order lastOrder
WHERE lastOrder.license = l
)
)
但我真的认为这不是一个好的解决方案,有什么建议吗?另一个选项是在另一个查询中创建子查询,用maxresults=1列出它,并通过参数将其传递给原始查询 大概是这样的:
Query hqlQuery = session.createQuery("SELECT MAX(lastOrder.id)
FROM Order lastOrder
WHERE lastOrder.license = l");
hqlQuery.setMaxResults(1);
List results = hqlQuery.list();
Integer maxId = null;
if (!results.isEmpty()){
maxId = results.get(0);
}
Query hqlQuery1 = session.createQuery("SELECT l, o
FROM User u
INNER JOIN u.licenses l
LEFT JOIN l.orders o
WITH o.id = :maxId
WHERE u.idtPerson = :idtPerson
AND l.statusCode != 3");
hqlQuery1.setParameter("maxId", maxId);
hqlQuery1.list();
...etc...
也许这对您有用另一个选项将在另一个查询中创建子查询,使用maxresults=1列出它,并通过参数将其传递给原始查询 大概是这样的:
Query hqlQuery = session.createQuery("SELECT MAX(lastOrder.id)
FROM Order lastOrder
WHERE lastOrder.license = l");
hqlQuery.setMaxResults(1);
List results = hqlQuery.list();
Integer maxId = null;
if (!results.isEmpty()){
maxId = results.get(0);
}
Query hqlQuery1 = session.createQuery("SELECT l, o
FROM User u
INNER JOIN u.licenses l
LEFT JOIN l.orders o
WITH o.id = :maxId
WHERE u.idtPerson = :idtPerson
AND l.statusCode != 3");
hqlQuery1.setParameter("maxId", maxId);
hqlQuery1.list();
...etc...
也许这对你有用