Im Objektgraphen wird ein Zyklus erkannt. Dies wird unendlich tiefes XML verursachen

8

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%     
Prats 25.06.2013, 10:51
quelle

3 Antworten

7

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

    
Tom Anderson 25.06.2013 12:12
quelle
4

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

Blaise Doughan 25.06.2013 13:11
quelle
0

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%     
smftr 01.05.2017 01:06
quelle

Tags und Links