java - 在 JPA Criteria API 中实现行索引功能
问题描述
所以我有以下情况:两个联合实体,Offer 和 Item,我想在其中获取部分并将它们放入这样的元组对象中:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
Metamodel m = entityManager.getMetamodel();
EntityType<Offer> offerMeta = m.entity(Offer.class);
CriteriaQuery<MyTupleContainer> criteriaQuery = criteriaBuilder.createQuery(MyTupleContainer.class);
Root<Offer> offer = criteriaQuery.from(Offer.class);
Join<Offer, Item> item = offer.join(offerMeta.getSingularAttribute("item", Item.class));
criteriaQuery.multiselect(offer.get("id"), item.get("name"), offer.get("offerValidUntil"),
item.get("regularPrice"), offer.get("discountInPercent"));
之后,应用过滤、排序和分页(数据显示在表格中)。
这可以正常工作,但是我还想在默认排序且不应用过滤/分页时获取每个元素的索引!具体来说,默认顺序是 by offer.get("offerValidUntil")
,升序。因此,如果我的数据库表有 100 个条目,我希望它们在查询执行时动态获取 1 到 100 的索引,并且应该在之后应用自定义排序/过滤/分页(因为显然如果之后完成它会弄乱正确的映射)。
ROW_NUMBER
我有一个有效的 SQL 查询,它在Oracle 窗口函数的帮助下完成了它应该做的事情:
SELECT Offer.id AS id,
Item.name AS name,
Offer.offer_valid_until AS offerValidUntil,
Item.regular_price AS regularPrice,
Offer.discount_in_percent AS discountInPercent
ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY Offer.offer_valid_until ASC) AS listIndex
FROM Offer LEFT JOIN Item ON Item.id = Offer.item_id
使用 Criteria API 的最佳方法是什么?
提前致谢!
解决方案
推荐阅读
- canvas - 有什么方法可以在 Safari 上使用 ctx.filter 吗?
- amazon-web-services - 如何在 getway 超时时显示来自 API Gateway 的自定义错误消息?
- c - lightuserdata 和指向 const 的指针
- python - 烧瓶 url_for 不使用参数
- typescript - Typescript 泛型不会像我希望的那样解析具体类型
- xcode - 如何在 TabView 中的屏幕之间切换以及从后者切换到另一个视图?
- c - C 中的 system("cls") 在使用动态分配后表现出一些奇怪的行为
- xamarin.forms - 棱镜区域错误 Prism.Regions.IActiveRegionHelper
- directory - 需要使用 Ansible 同步模块一起更改文件夹 + 文件的权限
- vuetify.js - v-switch 奇怪的 v-model 行为