java - 如何加入两个条件查询
问题描述
我有一个要进行条件查询的查询
select u.email, st.total_amount, st.company_total from users u
join (select user_id, SUM(balance) as total_amount,SUM(company_count) as company_total from subscription s
where s.is_active = 0
group by user_id) st on u.id = st.user_id
where u.is_active = 0
order by st.company_total
我已经做了1个条件查询
CriteriaQuery<UserImpl> innerQuery = builder.createQuery(UserImpl.class);
Root<Subscription> subscriptionRoot = innerQuery.from(Subscription.class);
innerQuery.multiselect(subscriptionRoot.get("user").get("id"), builder.sum(subscriptionRoot.get("balance")),
builder.sum(subscriptionRoot.get("companyCount")));
我不知道如何在 spring hibernate JPA 中进行外部查询。可以帮忙。
解决方案
定义一个 JOIN 子句非常简单。您首先在 CriteriaQuery 对象上调用 from 方法以获取 Root 对象。在下一步中,您可以调用 join 方法来定义您的 JOIN 子句。
以下是 Docs 的示例,您可以根据您的示例对其进行操作。
您可以参考 Hibernate 文档以获取连接示例。以下是示例代码。
CriteriaQuery<String> q = cb.createQuery(String.class);
Root<Order> order = q.from(Order.class);
q.select(order.get("shippingAddress").<String>get("state"));
CriteriaQuery<Product> q2 = cb.createQuery(Product.class);
q2.select(q2.from(Order.class)
.join("items")
.<Item,Product>join("product"));
下面列出了我发现的另一个简单示例:
<Y> ListJoin<X, Y> join(ListAttribute<? super X, Y> list);
快速示例(假设 Employee 具有多对多关系的任务列表):
CriteriaQuery<Employee> query = criteriaBuilder.createQuery(Employee.class);
Root<Employee> employee = query.from(Employee.class);
ListJoin<Employee, Task> tasks = employee.join(Employee_.tasks);
query.select(employee)
.where(criteriaBuilder.equal(tasks.get(Task_.supervisor),
employee.get(Employee_.name)));
TypedQuery<Employee> typedQuery = entityManager.createQuery(query);
List<Employee> employees = typedQuery.getResultList();
参考:这里
推荐阅读
- javascript - Laravel & chartjs 空白画布
- python - 在python中调整图片大小
- unreal-engine4 - 如何编译虚幻引擎插件并更新当前 UE 版本?
- python - 有没有办法在 Python 中创建嵌套类属性?
- firebase - 我可以在 Firebase 集合中保存的最大文档大小是多少?
- c++ - 如何使用 Boost Spirit 解析类似转义字符串的 CSV?
- java - 在 Apache Ignite 中获取内存指标
- angular - 带有自定义组件的角度表单渲染
- android - Android:如何在 MediaPlayer 中播放无缝音频循环?
- android - 我不知道为什么我的列表视图在列表末尾显示额外的背景