Ich möchte testweise mal per Jaxb eine Rechnung mit ihren Rechnungspositionen ausgeben. Die beiden entsprechenden Java Klassen haben die folgenden Annotationen:
Die Klasse für die Rechnung:
..und für die Rechnungspositionen:
In der Datenbank sieht das dann so aus, dass ich in der Tabelle mit den Rechnungsdetails schön den Fremdschlüssel für die Rechnung drin stehen habe.
Beim Versuch das Ganze par Jaxb als XML oder JSON auszugeben bekomme ich regelmäßig eine Exception:
Was ich schon probiert habe, sind folgende Variationen:
In der Klasse InvoiceDetail..
....natürlich auch einzeln und in beliebigen Kombinationen. Dann gibt es wohl noch @XmlIDREF und @XmlID, die mich aber auch nicht weiter bringen, weil ich ja keinen String Wert mappe.
Kann mir bitte jemand sagen, wie man eine 1:n Beziehung mit JPA anlegt, die dann bei der Verwendung von jaxb nicht zu diesem Fehler führt?
Danke im Voraus
Michael
Die Klasse für die Rechnung:
Java:
@XmlRootElement
@Entity
@Table(name="Invoice")
public class Invoice {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
...
@OneToMany(mappedBy="invoice", cascade = {CascadeType.ALL })
@PrivateOwned
private List<InvoiceDetail> details = new ArrayList<InvoiceDetail>();
....
..und für die Rechnungspositionen:
Java:
@Entity
@Table(name="InvoiceDetail")
public class InvoiceDetail {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private int id;
...
@ManyToOne
@JoinColumn(name="INVOICE_ID", nullable=false)
private Invoice invoice;
public Invoice getInvoice() {
return invoice;
}
public void setInvoice(Invoice invoice) {
this.invoice = invoice;
}
....
In der Datenbank sieht das dann so aus, dass ich in der Tabelle mit den Rechnungsdetails schön den Fremdschlüssel für die Rechnung drin stehen habe.
Beim Versuch das Ganze par Jaxb als XML oder JSON auszugeben bekomme ich regelmäßig eine Exception:
Java:
A cycle is detected in the object graph. This will cause infinitely deep XML: de.meintest.model.Invoice@4735572b -> de.meintest.model.InvoiceDetail@3717ee94 -> de.meintest.model.Invoice@4735572b
Was ich schon probiert habe, sind folgende Variationen:
In der Klasse InvoiceDetail..
Java:
@ManyToOne(fetch=FetchType.LAZY)
@XmlInverseReference(mappedBy="details")
@XmlTransient
private Invoice invoice;
...
....natürlich auch einzeln und in beliebigen Kombinationen. Dann gibt es wohl noch @XmlIDREF und @XmlID, die mich aber auch nicht weiter bringen, weil ich ja keinen String Wert mappe.
Kann mir bitte jemand sagen, wie man eine 1:n Beziehung mit JPA anlegt, die dann bei der Verwendung von jaxb nicht zu diesem Fehler führt?
Danke im Voraus
Michael