JPA kullanılarak hesaplanan bir özelliği eşlemek için bir yol var mı?JPA ile hesaplanan özellikleri eşleme
ben onun içinde bir veya birden fazla InvoiceLineItems
ile Invoice
nesne var varsayarsak, bana toplam miktarı verir Invoice
sınıfına kalıcı hesaplanmış özelliği vardır istiyorum: Şimdi
class Invoice {
...
@Column(name = "TOTAL_AMOUNT")
public BigDecimal getTotalAmount() {
BigDecimal amount = BigDecimal.ZERO;
for (InvoiceLineItem lineItem : lineItems) {
amount = amount.add(lineItem.getTotalAmount());
}
return amount;
}
}
, ben oluşturabilir JPA'yı mutlu etmek için No-op setTotalAmount
yöntemini korumalı, ancak JPA'nın haritalamanın tek yol olduğunu ve gereksiz bir setter metodu oluşturmasını engellemenin bir yolu olup olmadığını merak ediyorum.
sayesinde Aleks
İşaretleme özelliği bana yardımcı olmaz: Eğer okuma üzerinde değerini hesaplamak istiyorsanız
,
@PostLoad
açıklama istediğini olabilir. JPA'nın bunu görmezden gelmesini istemiyorum - Toplam miktarın bir veritabanında kalmasını istiyorum, böylece çocuk masasından bilgi toplamak zorunda kalmadan doğrudan sorgulayabiliyorum. Öyleyse sorduğum şey, hesaplanmış bir özelliği (Java anlamında, kalıcılık ile tamamen ilgisiz), bunun için gereksiz ayarlayıcı uygulamak zorunda kalmadan nasıl devam ettirileceğidir. –Örneğiniz o zaman garip. ** bu değeri ** kaydedip üzerinde sorgulama yapıyorsanız, neden bunu alıcınızda yeniden hesaplıyorsunuz? Bununla birlikte, alt satırda, getto yöntemini (mülkün karşıtı olarak) ekliyorsanız, JPA'nın bu değeri kuruluşunuzda doldurması için karşılık gelen bir ayarlayıcı (özel olabilir) olması gerekir. – ChssPly76
Verdiğim örnek, üzerinde çalıştığım etki alanı modelinin, birden çok ilişki düzeyine sahip, her bir düzeyde, çocuklara bağlı olarak hesaplanan özellik ile brüt aşırı basitleştirilmesidir. Gerektiğinde Java'daki değerin hesaplanması, (derin) bir hiyerarşi içindeki alt nesneler eklendiğinde, kaldırıldığında veya değiştirildiğinde, toplamı güncelleştirmeye çalışmaktansa, toplamı yeniden hesaplamaya başladığımdan önemli ölçüde daha kolaydır. –