類別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