<entity-mappings xmlns="https://jakarta.ee/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence/orm https://jakarta.ee/xml/ns/persistence/orm/orm_3_1.xsd" version="3.1">
<entity class="de.faktorzehn.partnerinterface.model.extension.PartnerExtension" access="FIELD" metadata-complete="false">
<attributes>
<one-to-one name="partner" fetch="EAGER" target-entity="de.faktorzehn.partnerinterface.model.Partner">
<join-column name="PARTNER_ID" />
</one-to-one>
</attributes>
</entity>
<entity class="de.faktorzehn.partnerinterface.model.Partner" access="FIELD" metadata-complete="false">
<attributes>
<one-to-one mapped-by="partner" name="partnerExtension" fetch="EAGER" orphan-removal="true" target-entity="de.faktorzehn.partnerinterface.model.extension.PartnerExtension">
<cascade>
<cascade-all />
</cascade>
</one-to-one>
</attributes>
</entity>
<entity class="de.faktorzehn.partnerinterface.model.extension.NaturalPersonExtension" access="FIELD" metadata-complete="false">
<attributes>
<one-to-one name="naturalPerson" fetch="EAGER" target-entity="de.faktorzehn.partnerinterface.model.NaturalPerson">
<join-column name="NATURAL_PERSON_ID" />
</one-to-one>
</attributes>
</entity>
<entity class="de.faktorzehn.partnerinterface.model.NaturalPerson" access="FIELD" metadata-complete="false">
<attributes>
<one-to-one mapped-by="naturalPerson" name="naturalPersonExtension" fetch="EAGER" orphan-removal="true" target-entity="de.faktorzehn.partnerinterface.model.extension.NaturalPersonExtension">
<cascade>
<cascade-all />
</cascade>
</one-to-one>
</attributes>
</entity>
<entity class="de.faktorzehn.partnerinterface.model.extension.LegalEntityExtension" access="FIELD" metadata-complete="false">
<attributes>
<one-to-one name="legalEntity" fetch="EAGER" target-entity="de.faktorzehn.partnerinterface.model.LegalEntity">
<join-column name="LEGAL_ENTITY_ID" />
</one-to-one>
</attributes>
</entity>
<entity class="de.faktorzehn.partnerinterface.model.LegalEntity" access="FIELD" metadata-complete="false">
<attributes>
<one-to-one mapped-by="legalEntity" name="legalEntityExtension" fetch="EAGER" orphan-removal="true" target-entity="de.faktorzehn.partnerinterface.model.extension.LegalEntityExtension">
<cascade>
<cascade-all />
</cascade>
</one-to-one>
</attributes>
</entity>
</entity-mappings>
Konfigurations- und Erweiterungsmöglichkeiten
Persistenz des Partnermodells
An den Modellklassen des Partnermodells sind Persistenzinformationen über Annotationen der `Jakarta Persistency API (JPA)' hinterlegt. Die Modellklassen können auf diese Weise leicht in der relationalen Datenbank eines das Partner-Interface nutzenden Systems persistiert werden, falls erforderlich.
Die Namen aller für die Modellklassen des Partner-Interfaces angelegten Tabellen beginnen mit dem Prefix "PI_" zur Abgrenzung zu den eigenen Tabellen des anbindenden Systems.
Um die Persistierung der Modellklassen zu ermöglichen, werden für alle erweiterbaren Enum-Klassen des Partner-Interfaces entsprechende AttributeConverter
-Klassen für die Persistierung der enthaltenen Enum-Werte zur Verfügung gestellt. Diese ermitteln die möglichen Enum-Werte der erweiterbaren Enums über das PartnerEnumsRuntimeRepositoryLookup
, das an eine PartnerRepository
-Instanz delegiert. Mehr Details finden sich im Kapitel zu erweiterbaren Enums.
Systeme, die das Partner-Interface ohne Nutzung der angebotenen Persistenzmöglichkeit verwenden möchten, können dies ohne Einschränkung tun. In diesem Fall ist es auch nicht notwendig, Bibliotheken zur Persistenz einzubinden. Derartige Bibliotheken werden nicht vom Partner-Interface transitiv mit ausgeliefert.
Ausnahmen von der Persistierbarkeit
-
Für die Klasse
BrokerInfo
sind keine Persistenzinformationen hinterlegt, da Vermittler üblicherweise in einem Fremdsystem gepflegt und dort persistiert werden. -
Die Klasse
PartnerSearchParameters
besitzt ebenfalls keine Persistenzinformationen, da dies für Suchparameter nicht sinnvoll ist. -
Für das Persistieren von Ableitungen der abstrakten Klassen
PartnerExtension
,NaturalPersonExtension
undLegalEntityExtension
sind zusätzliche Maßnahmen erforderlich. Diese werden im folgenden Abschnitt beschrieben.
Persistenz für Partnererweiterungen
Die abstrakten Klassen PartnerExtension
, NaturalPersonExtension
und LegalEntityExtension
können im Projekt erweitert werden, um zusätzliche Eigenschaften für Partner zu definieren. Da dies jedoch nicht zwingend erfolgen muss, ist die Modellbeziehung zwischen der jeweiligen Partnerklasse und seiner Erweiterung als transient gekennzeichnet, damit in Systemen, die diese Erweiterungen nicht nutzen wollen, auch keine Tabellen dafür angelegt werden müssen.
Sollen die Partnererweiterungen genutzt und auch persistiert werden, muss die Persistenzinformation zu dieser Beziehung daher von Hand der einer entsprechenden orm.xml
Datei ergänzt werden:
Beispielhaft kann das Vorgehen auch anhand des Unit-Tests PartnerExtensionsPersistenceTest
mit der zugehörigen test-extensions-orm.xml
nachvollzogen werden.