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;
}
}
を、私が作成することができますJPAを幸せにするための保護されていないsetTotalAmount
メソッドがありますが、JPAにマッピングが片方だけであることを知らせ、余分なセッターメソッドを作成しないようにする方法があるのだろうかと思いました。
おかげで、 ALEKS
マーキング性が私を助けにはなりません:あなたは、読み取り上の値を計算したい場合は
、
@PostLoad
注釈は何をしたいかもしれません。私はJPAがそれを無視しないようにしたい - 私はそれが直接子テーブルから情報を集約することなくそれを照会することができるように、データベースに残っている総量します。 私が求めているのは、不必要なセッターを実装しなくても、計算されたプロパティ(永続性とは完全に無関係なJavaの意味で)を永続化する方法です。 –あなたの例はかなり奇妙です。あなたが**この値を保存してそれに照会しているなら、どうしてあなたのゲッターでそれを再計算していますか?しかし、要点は、JPAがその値をあなたのエンティティに移入するために、(プロパティではなく)getterメソッドに注釈を付ける場合、対応するセッター(プライベートでもよい)を持たなければならないということです。 – ChssPly76
私が与えた例は、私が働いているドメインモデルの過度の単純化です。これは、子どもに依存する各レベルで計算されたプロパティを持つ、1対多の関係のいくつかのレベルを持っています。 必要に応じてJavaの値を計算するのは、(深い)階層の子オブジェクトが追加、削除、または変更されるたびに合計を更新するよりもはるかに簡単です。そのため再計算します。 –