2011-01-17 1 views
4

Ich beginne ein neues Projekt, das sowohl JAXB als auch JPA Annotationen verwendet. Ich habe mit Interesse die Beiträge gelesen, in denen die Vor- und Nachteile der Mischung von JAXB- und JPA-Anmerkungen in einer einzigen Klasse diskutiert wurden.JAXB & JPA Anmerkungen. Gibt es starke Argumente dafür, Feldzugriff dem Eigentumszugriff vorzuziehen?

Gibt es Richtlinien, die beschreiben, wann Annotationen auf Feldebene zu verwenden sind und wann Annotationen auf Eigenschaftsniveau oder Argumente für die allgemeine Wahl eines Ansatzes gegenüber dem anderen zu verwenden sind? Ich finde Anmerkungen auf Feldebene sauberer und besser lesbar; Sie befinden sich normalerweise an der Spitze der Klasse und machen es leicht herauszufinden, wie jedes Feld in verschiedenen Kontexten dargestellt wird. Abgesehen von diesem Argument hinsichtlich der Lesbarkeit, gibt es noch andere Dinge zu beachten, wenn Sie entscheiden, wo Sie kommentieren sollen?

Antwort

3

JPA verwendet häufig das verzögerte Laden von Eigenschaften. Wenn Sie den Eigenschaftenzugriff in JAXB verwenden, werden diese faulen Eigenschaften während eines Marshals ausgelöst.

Auch um Lazy Loading zu unterstützen (oder Tracking ändern, etc). Einige JPA-Implementierungen verwenden eine Bytecode-Manipulation, um Felder in Klassen einzufügen, um dies zu ermöglichen. Die Verwendung von Feldzugriff mit JAXB kann bei Verwendung dieser Art von JPA-Implementierung zu Fehlern führen.

Einige Material Bezug auf mit JAXB im Zusammenhang mit JPA-Entitäten:

+0

So Zugriff JAXB Feldebene mit auf JPA-Entitäten beharrte auf fremde Daten gemarshallt werden führen könnte? – Fil

+0

Ich finde es auch interessant, dass es die Kombination von JAXB und JPA Anmerkungen, die bestimmt, wo sie am effektivsten angewendet werden. – Fil

+0

Es gibt Kompromisse, die berücksichtigt werden müssen. Lazy Loading ist ein wichtiger Aspekt von JPA, da es die Menge der realisierten Daten begrenzt. Natürlich passiert es nicht, dass Lazy Loading magisch irgendwie implementiert werden muss. Einige Implementierungen behandeln dies, indem sie ein Feld einfügen (natürlich könnten sie dieses Feld mit @XmlTransient annotieren, um sicher zu sein). JPA-Implementierungen sind nicht die einzigen, die eine Byte-Code-Manipulation verwenden, nur diejenigen, die für diese Frage relevant sind. –

1

Ein weiterer Vorteil ist, dass Sie nicht alle Felder als Eigenschaften verfügbar machen müssen. Wenn es keinen guten Grund gibt, etwas anderes zu tun, bevorzuge ich generell Annotationen auf Feldebene.