2010-11-19 76 views
4

类别AB有一对多的关系。因此,A有一个属性collectionOfBJPA:使用count直接将集合大小映射到属性?

有没有什么办法可以将“count B”映射​​到A中的单个属性?

目的是提供一个快捷方式来检索关联的B的数量,而无需加载整个集合。有时候我需要的是计数,即收集尺寸。我知道我可以发出一个针对实体管理器的查询,完全是这样。但是,由JPA提供者通过注释来完成它当然更可取。

+1

我不知道有什么办法做到这一点。你必须写一个COUNT查询。 – 2010-11-19 23:58:37

+0

刚刚意识到,如果有人愿意放弃JPA,可能会使用Hibernate公式(http://docs.jboss.org/hibernate/core/3.5/reference/en/html/mapping.html#mapping-column)合规性。 – 2011-05-21 05:05:16

回答

0

据我所知,这是不可能的。 正如你已经建议的那样,运行一个查询来实现这一点,除非你有成千上万的B对象,并且你仍然可以缓存它并且每x分钟更新一次,否则它不应该很贵。

更容易出错的解决方案是使用这些类型的数字来统计实体。

+0

编写查询时遇到的问题是我们实体的使用方式。我们使用Dozer自动将它们映射到各自的DTO(传回到表示层)。 – 2010-11-20 07:39:05

+0

所以,当ADto有一个字段编号的时候,推土机会调用A#getNumberOfBs()。通常,根据A中的JPA注释,如果尚未存在于A中,则数据将自动从数据存储中加载,即,延迟。由于我们经常使用分区DTO,例如ADto和ASummaryDto,因此DTO有时需要一组Bs,有时只需要numberOfBs。希望我能够以一种可理解的方式解释这一点...... – 2010-11-20 07:45:25