我試圖得到一個一對多的關係,通過以下關係式所示的總和(僅顯示父):總和與一對多春數據JPA
@Entity
@Table(name = "Parent")
public class Parent implements Serializable {
private static final long serialVersionUID = -7348332185233715983L;
@Id
@Basic(optional = false)
@Column(name = "PARENT_ID")
private Long parentId;
@OneToMany
@JoinColumn(name="CHILDREN", referencedColumnName="PARENT_ID")
private List<Child> children;
@Formula("(select sum(select height from children))")
private BicDecimal totalHeight
}
這是很簡單的,沒有限制甚至是靜態限制。當兒童列表被動態限制時,我遇到了麻煩。
就我而言,我使用的是spring數據和jpa。我正在使用規範來限制孩子,並獲得適當的孩子列表,但顯然這個總數仍然適用於無限制的孩子,因爲@Formula標籤中沒有where子句。
我不想在java中出於性能原因迭代列表,因爲結果是分頁的。此外,總和不是分頁結果,而是所有結果。
我是Spring Data/JPA的新手。從歷史上看,我可以動態構建這個查詢或使用休眠條件。我確定運行完整的單獨查詢來進行此計算。不要求我使用@Formula註釋,因爲每次調用只有1個聚合。在hibernate框架中,我可以將select子句聲明爲「sum(field)」並構建標準。在Spring Data/JPA框架中,我可以建立涵蓋標準的規範,但我不知道如何操作查詢的選擇部分,因爲它似乎與實體緊密相連。
使用的存儲庫中的@Query註釋工作作爲自己的查詢,如果我知道哪些字段我需要限制,但往往這些字段是空的,不需要對查詢被忽略。有8個可能的字段,給我256個可能的組合(2^8)。這在存儲庫中的方法太多了。
轉換框架之外的任何想法?