Ich habe eine Datenbank, die verschiedene Arten von Beziehungen basierend auf Daten haben kann, die während der letzten Geschäftstransaktion aktualisiert wurden. Ein Beispiel wäre in einer Anwendung zum Schreiben von Richtlinien. Die Haupttabelle enthält allgemeine Richtlinieninformationen und es gibt verwandte Tabellen, die Informationen wie die Informationen des Agenten und die Informationen des Versicherten enthalten. Wenn die erste Transaktion ausgegeben wird, werden alle Tabellen aufgefüllt. Bei nachfolgenden Transaktionen werden jedoch nur die Tabellen mit Aktualisierungen in der Datenbank beibehalten. Ich versuche nun, Klassen zu erstellen, die JPA implementieren und die Beziehungen zwischen den Tabellen eins zu eins definieren. Ich möchte dann benutzerdefinierte Ladeprogramme für jede der Beziehungen implementieren, um sicherzustellen, dass ich jedes Mal, wenn ich die Richtlinieneinheit abrufe, in der Lage bin, die neueste Version der entsprechenden Tabellen abzurufen. Weiß jemand, wie man diese Logik implementiert? Ich habe versucht, @NamedNativeQuery
zu verwenden und HQL zu verwenden, aber in beiden Fällen sagt es mir, dass ein Spaltenname, den ich spreche, nicht existiert.Benutzerdefinierte OneToOne Hibernate/JPA Association
Jede Hilfe wäre sehr willkommen.
Code wurde unten zur Verfügung gestellt, um zu veranschaulichen, was ich mache.
@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;
}
}
Im obigen Beispiel würde die SystemAssignId zu dieser Einheit gehör zwischen allen Datensätzen gemeinsam sein. Die transSeqNo würde für jede nachfolgende Transaktion inkrementiert und somit würde der benutzerdefinierte Lader nach dem höchsten Wert suchen, der mit systemAssignId assoziiert ist.
Vielen Dank für Ihre Unterstützung.