Gibt es eine Möglichkeit, eine berechnete Eigenschaft mit JPA abzubilden?Mapping berechneter Eigenschaften mit JPA
Angenommen, ich habe ein Invoice
Objekt mit einem oder mehreren InvoiceLineItems
innerhalb es, ich will auf der Invoice
Klasse eine persistente berechnete Eigenschaft haben, die mir die Gesamtmenge gibt:
class Invoice {
...
@Column(name = "TOTAL_AMOUNT")
public BigDecimal getTotalAmount() {
BigDecimal amount = BigDecimal.ZERO;
for (InvoiceLineItem lineItem : lineItems) {
amount = amount.add(lineItem.getTotalAmount());
}
return amount;
}
}
Nun, ich könnte ein erstellen protected no-op setTotalAmount
Methode, um JPA glücklich zu machen, aber ich frage mich, ob es eine Möglichkeit gibt, JPA wissen zu lassen, dass das Mapping nur eine Möglichkeit ist und die Erstellung einer überflüssigen Setter-Methode zu vermeiden.
Danke, Aleks
Kennzeichnung Eigenschaft als @Transient wird mir nicht helfen. Ich möchte nicht, dass JPA es ignoriert - ich möchte, dass die Gesamtmenge in einer Datenbank gespeichert wird, so dass ich direkt danach fragen kann, ohne Informationen aus der Kindtabelle aggregieren zu müssen. Also was ich frage ist, wie man eine berechnete Eigenschaft persistent (in Java Sinn, völlig unabhängig von Persistenz), ohne unnötige Setter für sie implementieren. –
Ihr Beispiel ist dann eher seltsam. Wenn Sie diesen Wert ** speichern und abfragen, warum berechnen Sie ihn in Ihrem Getter neu? Die Quintessenz ist jedoch, dass Sie, wenn Sie die Getter-Methode (im Gegensatz zur Eigenschaft) annotieren, einen entsprechenden Setter haben müssen (er kann privat sein), damit JPA diesen Wert für Ihre Entität auffüllen kann. – ChssPly76
Das Beispiel, das ich gab, ist grobe übermäßige Vereinfachung des Domänenmodells, mit dem ich arbeite, die mehrere Ebenen von Beziehungen zwischen eins und vielen haben, mit berechneten Eigenschaften auf jeder Ebene, die von Kindern abhängen. Den Wert in Java nach Bedarf zu berechnen ist wesentlich einfacher als zu versuchen, die Summe zu aktualisieren, da untergeordnete Objekte in einer (tiefen) Hierarchie hinzugefügt, entfernt oder geändert werden, weshalb ich sie neu berechne. –