JPA:是否可以直接使用count将集合大小映射到属性?

6

AB 之间存在一对多的关系。因此,A 有一个名为 collectionOfB 的属性。

我是否可以将 "计数 B" 映射到 A 中的单个属性中?

这样做的目的是提供一种快捷方式来检索相关的 B 数量,而无需加载整个集合。有时我只需要计数,即集合大小。我知道我可以发出针对实体管理器的查询来完成这项工作。但是,通过注释由 JPA 提供程序执行该操作当然更可取。


1
我不知道有任何方法可以做到那样。你只能编写一个 COUNT 查询。 - Mike Baranczak
刚刚意识到,如果愿意放弃JPA的兼容性,使用Hibernate公式(http://docs.jboss.org/hibernate/core/3.5/reference/en/html/mapping.html#mapping-column)可能是可行的。 - Marcel Stör
3个回答

4

这是一个好的方法,因为它不需要太多的努力。当您在集合上调用size()时,计数查询将被执行。 - Casey Watson


0
据我所知,这是不可能的。 正如您已经建议的那样,运行查询以实现此目的,除非您有数十万个B对象,否则它不应该很昂贵,并且您仍然可以缓存它并仅每x分钟更新一次。
更容易出错的解决方案是使用具有这些数字的统计实体。

我在编写查询时遇到的问题是我们实体的使用方式。我们使用Dozer自动将它们映射到相应的DTO(传递回演示层)。 - Marcel Stör
因此,当ADto有一个名为numberOfBs的字段时,Dozer会调用A#getNumberOfBs()。通常情况下,根据A中的JPA注释,如果A中尚未存在数据,则数据会自动从数据存储加载,即惰性加载。由于我们经常使用分区DTO,例如ADto和ASummaryDto,因此DTO有时需要B的集合,有时仅需要numberOfBs。希望我能够以可理解的方式解释清楚这一点... - Marcel Stör

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接