Hibernate Criteria API:在 Map 中对结果进行计数和分组
Car
实体映射到包含 2 列的数据库表:ID
和 Color
。
CarDao
有以下方法:
Map<Color, Integer> countByColor();
如果数据库表中有 3 辆红色汽车和 2 辆蓝色汽车,则该方法返回一个带有 2 个键(红色和蓝色)和相应计数(3 或 2)的地图)。
我想使用 Criteria API 来完成此操作。该方法会是什么样子?让我担心的是地图部分。
谢谢。
The Car
entity is mapped to a database table with 2 columns: ID
and Color
.
CarDao
has the following method:
Map<Color, Integer> countByColor();
If we have 3 red cars and 2 blue cars in the database table, the method returns a map with 2 keys (red and blue) and the corresponding count (3 resp. 2).
I would like to do this with the Criteria API. What would the method look like? It’s the Map part that worries me.
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为您所要求的内容对于 Criteria API 来说是不可能的(不做混乱的事情):API 中的任何方法都不会返回集合(在您的情况下将是一个地图),它们只返回列表。
所以你可以做的是编写你自己的 ResultTransformer ,它将返回一个单例列表,其第一个也是唯一的元素将是你的地图......但在我看来这会有点混乱。
类似的事情:
要获取仅包含两个元素(颜色和计数)的元组,请使用 Criteria.setProjections() 方法。
I think what you are asking is not possible (without doing messy things) with the Criteria API : none of the method in the API returns a collection (that would be a map in your case), they only return Lists.
So what you could do is write your own ResultTransformer that would return a singleton list whose first and only element will be your map... but that would be a bit messy in my opinion.
something like that :
to get tuples with only two elements (Color and count), use the Criteria.setProjections() method.