Ich habe zwei DTO-Objekte, die sagen "A" und "B", die Getter und Setter haben und dazu verwendet werden, Daten aus der Datenbank zu übernehmen. Das Problem ist, wenn ich A anrufe, B ruft und B wieder auf A zeigt und ein Zyklus entsteht.
Ich kann die Methode, die den Zyklus erstellt, nicht ignorieren / ausblenden. Ich muss die ganzen Daten von A und B nehmen.
Gibt es einen Weg, es zu erreichen?
Bitte helfen Sie
Dies ist mein Code, der das Problem verursacht. Dies ist die Anwendungs-DTO, die die Umgebungs-DTO aufruft
%Vor%Und das ist Umwelt-DTO, die den Anwendungs-DTO
aufruft %Vor%Hier wird der Zyklus erstellt
Dies ist mein Ruhe-Aufruf, der das Ergebnis im XML-Format liefert und ich denke, während der Erstellung des XML-Zyklus wird erstellt
%Vor%Dies ist die Anwendungs-DTO-Klasse
%Vor%Dies ist die DTO-Klasse für die Umgebung
%Vor%Ihr Objektgraph ist zyklisch. Da ist nichts intrinsisch falsch, und es ist eine natürliche Konsequenz der Verwendung von JPA.
Ihr Problem besteht nicht darin, dass Ihr Objektgraph zyklisch ist, sondern dass Sie ihn in einem Format codieren, das keine Zyklen verarbeiten kann. Dies ist keine Hibernate-Frage, es ist eine JAXB-Frage.
Mein Vorschlag wäre, JAXB davon abzuhalten, die Eigenschaft application
der Klasse EnvironmentDTO
zu marshalen. Ohne diese Eigenschaft wird der zyklische Graph zum Baum. Sie können dies tun, indem Sie diese Eigenschaft mit @XmlTransient
kommentieren .
(Geständnis: Ich habe von dieser Anmerkung erfahren, indem ich einen Blogbeitrag von Herrn Doughan
Hinweis: Ich bin der EclipseLink JAXB (MOXy) Leitung und Mitglied der JAXB (JSR-222) Expertengruppe.
MOXy bietet die Erweiterung @XmlInverseReference
, um diesen Anwendungsfall zu behandeln. Im Folgenden finden Sie ein Beispiel für die Anwendung dieser Zuordnung auf zwei Entitäten mit einer bidirektionalen Beziehung.
Kunde
%Vor%Adresse
%Vor%Weitere Informationen
Mein Ratschlag ist nicht, dass Sie Ihre JPA-Entitätsklasse Ihren Webdiensten offen legen. Sie können verschiedene POJO-Klassen erstellen und Ihre JPA-Entität in POJO konvertieren. Zum Beispiel:
Dies ist Ihre JPA-Entität
%Vor%Sie sollten diese Klasse für Ihre Webservices verwenden:
%Vor%