【问题标题】:com.fasterxml.jackson.databind.JsonMappingException: Multiple back-reference properties with name 'defaultReference'com.fasterxml.jackson.databind.JsonMappingException:名称为“defaultReference”的多个反向引用属性
【发布时间】:2017-10-13 20:35:17
【问题描述】:

当我尝试将一个实体与多个实体映射时出现此错误..

/// 这是我的候选人资料实体/////////

包 com.demo.project.premiumjobportal.model; 导入 java.io.Serializable; 导入 java.util.List; 导入 javax.persistence.CascadeType; 导入 javax.persistence.Column; 导入 javax.persistence.Entity; 导入 javax.persistence.FetchType; 导入 javax.persistence.GeneratedValue; 导入 javax.persistence.Id; 导入 javax.persistence.ManyToOne; 导入 javax.persistence.OneToMany; 导入 javax.persistence.Table; 导入 javax.validation.constraints.NotNull; 导入 javax.xml.bind.annotation.XmlRootElement; 导入 com.fasterxml.jackson.annotation.JsonBackReference; 导入 com.fasterxml.jackson.annotation.JsonIgnoreProperties; //候选人明细表:主表 @实体 @Table(name="candidate_profile") @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) @XmlRootElement 公共类 CandidateProfile 实现 Serializable { 私有静态最终长序列版本UID = 1L; @ID @GeneratedValue 私人 int id; @NotNull @Column(name="first_name", 长度 = 25) 私人字符串名; @NotNull @Column(name="last_name", 长度 = 25) 私人字符串姓氏; @NotNull @Column(name="用户名", 长度 = 50) 私人字符串用户名; @Column(name="alt_email_id", 长度 = 50) 私人字符串alternateEmailId; @NotNull @Column(name="mobile_no", 长度 = 15) 私有字符串 mobileNum; @Column(name="alt_mobile_no", 长度 = 15) 私人字符串备用移动号码; @Column(name="ssc_board", 长度 = 50) 私有字符串 sscBoard; @Column(name="ssc_school", 长度 = 50) 私人字符串 sscSchool; @Column(name="ssc_percent", 长度 = 4) 私人浮动 sscPercentage; @Column(name="ssc_year_of_passout", 长度 = 4) 私人 int sscYearOfPassout; @Column(name="hsc_board", 长度 = 50) 私有字符串 hscBoard; @Column(name="hsc_school", 长度 = 50) 私人字符串 hscSchool; @Column(name="hsc_percent", 长度 = 4) 私人浮动 hscPercentage; @Column(name="hsc_year_of_passout", 长度 = 4) 私人 int hscYearOfPassout; @Column(name="grad_university", 长度 = 100) 私立弦乐研究生大学; @Column(name="grad_institute", 长度 = 100) 私人字符串 gradiduteInstitute; @Column(name="grad_percent", 长度 = 4) 私人浮动毕业百分比; @Column(name="grad_year_of_passout", 长度 = 4) 私人int gradiduteYearOfPassout; @Column(name="postgrad_university", 长度 = 100) 私人字符串 postGradiduteUniversity; @Column(name="postgrad_institute", 长度 = 100) 私人字符串 postGradiduteInstitute; @Column(name="postgrad_percent", 长度 = 4) 私人浮动 postGradidutePercentage; @Column(name="postgrad_year_of_passout", 长度 = 4) 私人 int postGradiduteYearOfPassout; 私有字符串注释; 私人字符串密码; @OneToMany(mappedBy = "candidateProfile", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE) @JsonBackReference 私单体验详情; @OneToMany(mappedBy = "candidateProfile", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE) @JsonBackReference 私人名单候选人工作; @ManyToOne 私人角色角色名称; /* 构造函数 */ 公共候选人档案(){ 极好的(); } // 获取器和设置器

/// 这是我的体验详情实体 ///////////

包 com.cfa.project.premiumjobportal.model; 导入 java.io.Serializable; 导入 javax.persistence.Column; 导入 javax.persistence.Entity; 导入 javax.persistence.GeneratedValue; 导入 javax.persistence.Id; 导入 javax.persistence.ManyToOne; 导入 javax.persistence.Table; 导入 javax.xml.bind.annotation.XmlRootElement; 导入 com.fasterxml.jackson.annotation.JsonIgnoreProperties; //体验类,与CandidateProfile.class相连 @实体 @Table(name="experience_details") @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) @XmlRootElement 公共类 ExperienceDetails 实现 Serializable { 私有静态最终长序列版本UID = 1L; @ID @GeneratedValue 私人 int id; @Column(name = "tot_experenice", 长度 = 2) 私人字符串 totExperience; @Column(name = "companies_month_experience") 私人弦乐公司月体验; @Column(name = "技能") 私人字符串_skills; @Column(name = "extra_curricular") 私人字符串课外; 私有字符串注释; /* 映射:加入候选表 */ @ManyToOne 私人候选人简介候选人简介; /*构造函数*/ 公共体验详情(){ 极好的(); } /*使用字段的构造函数*/ /** * @param id * @param totExperience * @param CompaniesMonthExperience * @param _skills * @param 课外 * @param 注释 * @param 候选人档案 */ public ExperienceDetails(int id, String totExperience, String CompaniesMonthExperience, String _skills, 字符串课外,字符串注释,CandidateProfile CandidateProfile) { 极好的(); 这个.id = id; this.totExperience = totExperience; this.companiesMonthExperience = CompaniesMonthExperience; this._skills = _skills; this.extraCurricular = 课外; this.notes = 注释; this.candidateProfile = 候选人简介; } /* 生成 Getter 和 setter */

/// 这是我的角色实体 //////

导入 java.io.Serializable; 导入 java.util.List; 导入 javax.persistence.CascadeType; 导入 javax.persistence.Column; 导入 javax.persistence.Entity; 导入 javax.persistence.FetchType; 导入 javax.persistence.GeneratedValue; 导入 javax.persistence.Id; 导入 javax.persistence.OneToMany; 导入 javax.persistence.Table; 导入 javax.xml.bind.annotation.XmlRootElement; 导入 com.fasterxml.jackson.annotation.JsonBackReference; 导入 com.fasterxml.jackson.annotation.JsonIgnoreProperties; @实体 @Table(name="角色") @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) @XmlRootElement 公共类角色实现可序列化{ 私有静态最终长序列版本UID = 1L; @ID @GeneratedValue 私人 int id; @Column(长度 = 10) 私有字符串名称; @OneToMany(mappedBy = "roleName", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE) @JsonBackReference 私人名单候选人档案; @OneToMany(mappedBy = "companyRoleName", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE) @JsonBackReference 私人名单招聘人员详情;

这个错误我得到了----------------

Failed to evaluate Jackson deserialization for type [[simple type, class 
com.demo.project.premiumjobportal.model.CandidateProfile]]: 
com.fasterxml.jackson.databind.JsonMappingException: Multiple back-reference 
properties with name 'defaultReference'

请帮我解决这个问题。我到处搜索并尝试了所有解决方案,但后来我也收到了这个错误。

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

    如果您在项目中的 getter/setter 方法上使用 @JsonBackReference 两次以上,则应使用特定的引用名称来区分它们。

    Role实体类中,你已经使用了两次@JsonBackReference

    @OneToMany(mappedBy = "roleName", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
        @JsonBackReference
        private List candidateProfiles;
    
        @OneToMany(mappedBy = "companyRoleName", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
        @JsonBackReference
        private List recruiterDetails;
    

    你应该把它改成 -

    @OneToMany(mappedBy = "roleName", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
        @JsonBackReference(value="candidate-profiles")
        private List candidateProfiles;
    
        @OneToMany(mappedBy = "companyRoleName", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
        @JsonBackReference(value="recruiter-details")
        private List recruiterDetails;
    

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 2013-12-05
      • 1970-01-01
      • 2020-08-04
      • 2016-09-18
      • 2017-05-09
      • 2018-10-08
      • 1970-01-01
      • 2020-09-14
      相关资源
      最近更新 更多