2016-09-27 2 views
1

Entity-Relationship-Diagramm:konnte nicht schreiben Inhalt: Unendliche Rekursion

ERD

ich eine Übersetzung erhalten möchten, aber die element wird Übersetzung verlinken. es wird also zum Absturz bringen, weil es Looping hält ..

Übersetzung Einheit:

package com.exstodigital.photofactory.model; 

import javax.persistence.*; 

import java.io.Serializable; 

/** 
* Created by youri on 21-09-16. 
*/ 
@Table(name = "translation") 
@Entity 
public class Translation implements Serializable { 
    @Id 
    @GeneratedValue 
    private int id; 

    public int getId() { 
     return id; 
    } 

    private String text; 

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

    @OneToOne 
    @JoinColumn(name = "language_id") 
    private Language language; 

    public Language getLanguage() { 
     return language; 
    } 

    @OneToOne 
    @JoinColumn(name = "element_id") 
    private Element element; 

    public Element getElement() { 
     return element; 
    } 

    public Translation(int id, String text) { 
     this.id = id; 
     this.text = text; 
    } 

    public Translation() { 
     // Empty constructor 
    } 

    @Override 
    public boolean equals(Object obj) { 
     return obj instanceof Translation && (!this.text.equals(((Translation) obj).text)); 
    } 
} 

Element Einheit:

package com.exstodigital.photofactory.model; 

import javax.persistence.*; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

/** 
* Created by youri on 21-09-16. 
*/ 
@Entity 
@Table(name = "element") 
public class Element implements Serializable { 
    @Id 
    @GeneratedValue 
    private int id; 

    public int getId() { 
     return id; 
    } 

    private String label; 

    public String getLabel() { 
     return label; 
    } 

    public void setLabel(String label) { 
     this.label = label; 
    } 

    @OneToMany 
    @JoinColumn(name = "element_id") 
    private List<Translation> translations = new ArrayList<>(); 

    public List<Translation> getTranslations() { 
     return Collections.unmodifiableList(translations); 
    } 

    public Element(int id, String label) { 
     this.id = id; 
     this.label = label; 
    } 

    public Element() { 
     // Empty constructor 
    } 

    @Override 
    public boolean equals(Object obj) { 
     return obj instanceof Element && (this.id != ((Element) obj).id || !this.label.equals(((Element) obj).label)); 
    } 
} 

TranslationDaoImpl:

@Override 
public Translation get(int id) { 
    return sessionFactory.openSession().get(Translation.class, id); 
} 
+0

Mögliches Duplikat in Ihren Code kommt [unendliche Rekursion mit Jackson JSON und Hibernate JPA Ausgabe] (https://stackoverflow.com/questions/ 3325387/infinite-recursion-mit-jackson-json-und-hibernate-jpa-ausgabe) – Rumid

Antwort

1

Sie falsche Beziehung aufgebaut haben, von einer Seite gibst du OneToOne und mit demselben aber f rom zweite Einheit Sie geben OneToMany

Ihr Code:

@Table(name = "translation") 
@Entity 
public class Translation implements Serializable { 

    @OneToOne 
    @JoinColumn(name = "element_id") 
    private Element element; 

} 

@Entity 
@Table(name = "element") 
public class Element implements Serializable { 

    @OneToMany 
    @JoinColumn(name = "element_id") 
    private List<Translation> translations = new ArrayList<>(); 
} 

richtigen Code für OneToOne:

@Table(name = "translation") 
@Entity 
public class Translation implements Serializable { 

    @JsonIgnore  
    @OneToOne 
    @JoinColumn(name = "element_id") 
    private Element element; 

} 

@Entity 
@Table(name = "element") 
public class Element implements Serializable { 

    @OneToOne 
    (mappedBy="element") 
    private Translation translation; 
} 

richtigen Code für OneToMany:

@Table(name = "translation") 
@Entity 
public class Translation implements Serializable { 

    @JsonIgnore 
    @ManyToOne 
    @JoinColumn(name = "element_id") 
    private Element element; 

} 

@Entity 
@Table(name = "element") 
public class Element implements Serializable { 

    @OneToMany 
    (mappedBy="element") 
    private List<Translation> translations; 
} 

Use "@JsonIgnore" Unendliche Rekursion zu vermeiden, die

Verwandte Themen