私は、前回の業務トランザクション中に更新されたデータに基づいて、さまざまな種類のリレーショナルシップを持つことができるデータベースを持っています。ポリシー作成アプリケーションの例があります。メインテーブルには一般的なポリシーレベルの情報が含まれており、エージェントの情報や被保険者情報などの情報を含む関連テーブルがあります。最初のトランザクションが発行されると、すべての表が移入されますが、後続のトランザクションでは、更新を持つ表のみがデータベースに保持されます。私が今しようとしているのは、テーブル間の関係を一対一で定義するJPAを実装するクラスを作成することです。私は各関係のカスタムローダーを実装して、ポリシーエンティティを取得するたびに対応するテーブルの最新バージョンを取得できるようにしたいと考えています。誰もこのロジックを実装する方法を知っていますか? @NamedNativeQuery
を使用してHQLを使用しようとしましたが、両方のインスタンスで、指定した列名が存在しないことがわかります。カスタムOneToOne Hibernate/JPAアソシエーション
ご協力いただければ幸いです。
私が行っていることを説明するのに役立つコードが以下に提供されています。
@Entity
@NamedNativeQuery(name = "loadLatestBilling",
query = "Select {i.*} from TransactionSummary as ts outer join BillingInfo i on i.systemAssignId=ts.systemAssignId where ts.systemAssignId=:systemAssignId and i.transSeqNo<=:transSeqNo order by i.systemAssignId, i.transSeqNo DESC",
resultClass = BillingInfo.class)
public class CoTransactionSummary implements java.io.Serializable,
CdbCoTransactionSummary {
@OneToOne(targetEntity = BillingInfo.class, fetch = FetchType.LAZY)
@org.hibernate.annotations.NotFound(action = org.hibernate.annotations.NotFoundAction.IGNORE)
@Loader(namedQuery = "loadLatestBilling")
public BillingInfo getBillingInfo() {
return billingInfo;
}
public void setBillingInfo(BillingInfo billingInfo) {
this.billingInfo= billingInfo;
}
}
上記の例でSystemAssignIdは、そのエンティティに関連するすべてのレコード間で共通であろう。 transSeqNoは連続トランザクションごとにインクリメントされるため、カスタムローダーはsystemAssignIdに関連付けられた最高値を探します。
ご協力いただきありがとうございます。