波多野结衣 蜜桃视频,国产在线精品露脸ponn,a v麻豆成人,AV在线免费小电影

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了多對多關系中的Hibernate無限循環遞歸的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我要創建雙向的學生和學科關系。在我為用戶注冊紀律之前,一切都很正常。現在我得到無限遞歸。

類如下所示:

//Student.java
@Entity
@Table(name = "students")
public class Student {
    @NotNull
    @Id
    @Column(name = "STUDENT_ID")
    private String id;
    private String name;
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "students_disciplines", joinColumns = @JoinColumn(name = "STUDENT_ID"), inverseJoinColumns = @JoinColumn(name = "DISCIPLINE_ID"))
    @JsonSerialize(using = NestedDisciplineSetSerializer.class)
    private Set<Discipline> disciplines = new HashSet<>();
    //Getters, Setters
}
//NestedDisciplineSetSerializer.java
public class NestedDisciplineSetSerializer extends JsonSerializer<Set<Discipline>> {
    @Override
    public void serialize(Set<Discipline> value, JsonGenerator jgen, SerializerProvider p) throws IOException, JsonProcessingException {
        jgen.writeStartArray();
        for (Discipline s : value) {
            jgen.writeStartObject();
            jgen.writeStringField("name", s.getName());
            jgen.writeNumberField("id", s.getId());
            jgen.writeBooleanField("recommended", s.isRecommended());
            jgen.writeEndObject();
        }
        jgen.writeEndArray();
    }
}
//Discipline.java
@Entity`enter code here`
@Table(name = "disciplines")
public class Discipline {
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    @Column(name = "DISCIPLINE_ID")
    private int id;
    @NotNull
    private String name;
    @NotNull
    private int credits;
    private String annotation;
    private boolean recommended;
    @ManyToMany(mappedBy = "disciplines", fetch = FetchType.EAGER)
    @JsonSerialize(using = NestedStudentSetSerializer.class)
    private Set<Student> students = new HashSet<>();
    //Getters, Setters
}
//NestedStudentSetSerializer.java
public class NestedStudentSetSerializer extends JsonSerializer<Set<Student>> {
    @Override
    public void serialize(Set<Student> value, JsonGenerator jgen, SerializerProvider p) throws IOException, JsonProcessingException {
        jgen.writeStartArray();
        for (Student s : value) {
            jgen.writeStartObject();
            jgen.writeStringField("name", s.getName());
            jgen.writeStringField("id", s.getId());
            jgen.writeEndObject();
        }
        jgen.writeEndArray();
    }
}

加載Student s = sDao.findOne(id);之后的集合時出現錯誤

嘗試在此處搜索,但找不到正確的解決方案。任何東西都會產生相同的結果。

Error log

推薦答案

org.hibernate.collection.internal.PersistentSet.hashCode(PersistentSet.java:430)
~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
在truelecter.practproekt.entity.Discipline.hashCode(Discipline.java:31)
~[類(CLASS/:NA)]
在java.util.HashMap.hash(HashMap.java:338)~[NA:1.8.0_91]
在java.util.HashMap.put(HashMap.java:611)~[NA:1.8.0_91]
at java.util.HashSet.add(HashSet.java:219)~[NA:1.8.0_91]
在java.util.AbstractCollection.addAll(AbstractCollection.java:344)
~[NA:1.8.0_91]
在org.hibernate.collection.internal.PersistentSet.endRead(PersistentSet.java:327)
~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
在org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:234)
~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
在.org.hibernate.collection.internal.PersistentSet.hashCode(PersistentSet.java:430)
~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
在truelecter.practproekt.entity.Student.hashCode(Student.java:29)~[班級/:NA]
在java.util.HashMap.hash(HashMap.java:338)~[NA:1.8.0_91]
在java.util.HashMap.put(HashMap.java:611)~[NA:1.8.0_91]
at java.util.HashSet.add(HashSet.java:219)~[NA:1.8.0_91]
在java.util.AbstractCollection.addAll(AbstractCollection.java:344)~

DisciplineStudent實體的hashcode()方法實現都使用這兩個實體。
可能是我錯了,堆棧跟蹤不太清楚。
您如何定義實體的equals()hashcode()方法?
假設實體A和實體B具有雙向關系。
IFequals()/hashcode()實現實體A
對實體B字段調用equals()/hashcode(),而實體B字段本身又調用實體A字段,則您有一個循環。
而您的錯誤。

此外,即使您在equals()/hashcode()/toString()中通過確保兩者中只有一個引用另一個來縮短周期,也應該謹慎地調用實體關系的equals()/hashcode()/toString方法。
它可能會對性能產生真正的影響。如果打開了Hibernate會話,它可能確實會執行您意想不到的查詢。

這篇關于多對多關系中的Hibernate無限循環遞歸的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:Hibernate 關系 循環 無限 遞歸
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定