类别A
与B
有一对多的关系。因此,A
有一个属性collectionOfB
。JPA:使用count直接将集合大小映射到属性?
有没有什么办法可以将“count B”映射到A
中的单个属性?
目的是提供一个快捷方式来检索关联的B
的数量,而无需加载整个集合。有时候我需要的是计数,即收集尺寸。我知道我可以发出一个针对实体管理器的查询,完全是这样。但是,由JPA提供者通过注释来完成它当然更可取。
类别A
与B
有一对多的关系。因此,A
有一个属性collectionOfB
。JPA:使用count直接将集合大小映射到属性?
有没有什么办法可以将“count B”映射到A
中的单个属性?
目的是提供一个快捷方式来检索关联的B
的数量,而无需加载整个集合。有时候我需要的是计数,即收集尺寸。我知道我可以发出一个针对实体管理器的查询,完全是这样。但是,由JPA提供者通过注释来完成它当然更可取。
我能够使用Hibernate的超懒映射解决我的问题:http://www.frightanic.com/2010/11/21/extra-lazy-one-to-many-mapping-with-hibernate/
这是一个很好的方法,因为它不需要太多的努力。在您调用集合上的size()时执行count查询。 – 2012-04-30 22:53:40
据我所知,这是不可能的。 正如你已经建议的那样,运行一个查询来实现这一点,除非你有成千上万的B对象,并且你仍然可以缓存它并且每x分钟更新一次,否则它不应该很贵。
更容易出错的解决方案是使用这些类型的数字来统计实体。
编写查询时遇到的问题是我们实体的使用方式。我们使用Dozer自动将它们映射到各自的DTO(传回到表示层)。 – 2010-11-20 07:39:05
所以,当ADto有一个字段编号的时候,推土机会调用A#getNumberOfBs()。通常,根据A中的JPA注释,如果尚未存在于A中,则数据将自动从数据存储中加载,即,延迟。由于我们经常使用分区DTO,例如ADto和ASummaryDto,因此DTO有时需要一组Bs,有时只需要numberOfBs。希望我能够以一种可理解的方式解释这一点...... – 2010-11-20 07:45:25
我不知道有什么办法做到这一点。你必须写一个COUNT查询。 – 2010-11-19 23:58:37
刚刚意识到,如果有人愿意放弃JPA,可能会使用Hibernate公式(http://docs.jboss.org/hibernate/core/3.5/reference/en/html/mapping.html#mapping-column)合规性。 – 2011-05-21 05:05:16