JPA를 사용하여 계산 된 속성을 매핑하는 방법이 있습니까?JPA로 계산 된 속성 매핑
내가 그 안에 하나 또는 그 이상의 InvoiceLineItems
와 함께 Invoice
개체가 가정, 내가 나에게 총 금액주는 Invoice
클래스에 지속적으로 계산 된 속성을 갖고 싶어 : 이제
class Invoice {
...
@Column(name = "TOTAL_AMOUNT")
public BigDecimal getTotalAmount() {
BigDecimal amount = BigDecimal.ZERO;
for (InvoiceLineItem lineItem : lineItems) {
amount = amount.add(lineItem.getTotalAmount());
}
return amount;
}
}
을, 나는를 만들 수 있습니다 protected no-op setTotalAmount
JPA를 행복하게 만드는 방법이지만, JPA에 매핑이 한 가지 방법 일 뿐이고 불필요한 setter 메서드를 만들지 않도록하는 방법이 있는지 궁금합니다.
감사합니다, 하기 Aleks
표시 속성은 나에게 도움이되지 않습니다 : 당신이 읽기에 값을 계산하려면
의
@PostLoad
주석 당신이 원하는 수 있습니다. JPA가 그것을 무시하지 않기를 바란다. 총계를 데이터베이스에 저장하여 자식 테이블의 정보를 집계하지 않고도 직접 쿼리 할 수 있기를 바란다. 그래서 저는 불필요한 setter를 구현하지 않고 계산 된 속성 (Java 의미에서 완전성과 완전히 무관)을 유지하는 방법을 묻습니다. –당신의 예는 다소 이상합니다. **이 값을 저장하고 쿼리하는 경우 왜 getter에서 다시 계산합니까? 그러나 요점은 JPA가 엔티티에서 해당 값을 채우도록하기 위해 getter 메소드에 주석을 달려면 (속성과 대비하여) 해당 setter가 있어야한다는 것입니다. – ChssPly76
내가 준 예제는 일하고있는 도메인 모델의 과도한 단순화입니다.이 모델은 일대 다 관계의 여러 수준을 가지고 있으며, 각 수준에서 계산 된 속성을 자식에 의존합니다. 필요에 따라 Java에서 값을 계산하는 것이 (깊은) 계층 구조의 하위 개체가 추가, 제거 또는 수정 될 때 총계를 업데이트하는 것보다 훨씬 쉽습니다. 따라서 다시 계산합니다. –