java - com.fasterxml.jackson.databind.JsonMappingException : Multiple back-reference properties with name 'defaultReference'

标签 java spring hibernate

当我试图将一个实体映射到多个实体时,出现此错误..

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


    package com.demo.project.premiumjobportal.model;

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

    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    import javax.validation.constraints.NotNull;
    import javax.xml.bind.annotation.XmlRootElement;

    import com.fasterxml.jackson.annotation.JsonBackReference;
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

    //Candidate details table : Master Table
    @Entity
    @Table(name="candidate_profile")
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    @XmlRootElement
    public class CandidateProfile implements Serializable {

        private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue
        private int id;

        @NotNull
        @Column(name="first_name", length = 25)
        private String firstName;

        @NotNull
        @Column(name="last_name", length = 25)
        private String lastName;

        @NotNull
        @Column(name="username", length = 50)
        private String username;

        @Column(name="alt_email_id", length = 50)
        private String alternateEmailId;

        @NotNull
        @Column(name="mobile_no", length = 15)
        private String mobileNum;

        @Column(name="alt_mobile_no", length = 15)
        private String alternateMobileNum;


        @Column(name="ssc_board", length = 50)
        private String sscBoard;


        @Column(name="ssc_school", length = 50)
        private String sscSchool;


        @Column(name="ssc_percent", length = 4)
        private float sscPercentage;


        @Column(name="ssc_year_of_passout", length = 4)
        private int sscYearOfPassout;


        @Column(name="hsc_board", length = 50)
        private String hscBoard;


        @Column(name="hsc_school", length = 50)
        private String hscSchool;


        @Column(name="hsc_percent", length = 4)
        private float hscPercentage;


        @Column(name="hsc_year_of_passout", length = 4)
        private int hscYearOfPassout;


        @Column(name="grad_university", length = 100)
        private String gradiduteUniversity;


        @Column(name="grad_institute", length = 100)
        private String gradiduteInstitute;


        @Column(name="grad_percent", length = 4)
        private float gradidutePercentage;


        @Column(name="grad_year_of_passout", length = 4)
        private int gradiduteYearOfPassout;

        @Column(name="postgrad_university", length = 100)
        private String postGradiduteUniversity;

        @Column(name="postgrad_institute", length = 100)
        private String postGradiduteInstitute;

        @Column(name="postgrad_percent", length = 4)
        private float postGradidutePercentage;

        @Column(name="postgrad_year_of_passout", length = 4)
        private int postGradiduteYearOfPassout;

        private String notes;

        private String Password;

        @OneToMany(mappedBy = "candidateProfile", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
        @JsonBackReference
        private List experienceDetails;

        @OneToMany(mappedBy = "candidateProfile", fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
        @JsonBackReference
        private List candidateJobs;

        @ManyToOne
        private Role roleName;



        /* Constructor */
        public CandidateProfile() {
            super();
            }


        // Getters and Setters 

/// This is my experience details entity ////////////


    package com.cfa.project.premiumjobportal.model;

    import java.io.Serializable;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    import javax.xml.bind.annotation.XmlRootElement;

    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

    //Experience class, which connected with CandidateProfile.class
    @Entity
    @Table(name="experience_details")
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    @XmlRootElement
    public class ExperienceDetails implements Serializable {

        private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue
        private int id;

        @Column(name = "tot_experenice", length = 2)
        private String totExperience;

        @Column(name = "companies_month_experience")
        private String companiesMonthExperience;

        @Column(name = "skills")
        private String _skills;

        @Column(name = "extra_curricular")
        private String extraCurricular;

        private String notes;

        /* Mapping : Joining with Candidate table */
        @ManyToOne
        private CandidateProfile candidateProfile;

        /*Constructor*/
        public ExperienceDetails() {
            super();
        }


        /*Constructor using fields*/
        /**
         * @param id
         * @param totExperience
         * @param companiesMonthExperience
         * @param _skills
         * @param extraCurricular
         * @param notes
         * @param candidateProfile
         */
        public ExperienceDetails(int id, String totExperience, String companiesMonthExperience, String _skills,
                String extraCurricular, String notes, CandidateProfile candidateProfile) {
            super();
            this.id = id;
            this.totExperience = totExperience;
            this.companiesMonthExperience = companiesMonthExperience;
            this._skills = _skills;
            this.extraCurricular = extraCurricular;
            this.notes = notes;
            this.candidateProfile = candidateProfile;
        }

        /* Generating Getters and setters */

/// This is my role entity //////


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

    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    import javax.xml.bind.annotation.XmlRootElement;

    import com.fasterxml.jackson.annotation.JsonBackReference;
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

    @Entity
    @Table(name="role")
    @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
    @XmlRootElement
    public class Role implements Serializable {

        private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue
        private int id;

        @Column(length = 10)
        private String name;

        @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;

This error I'm getting----------------

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'

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

最佳答案

如果您在项目中的 getter/setter 方法中多次使用 @JsonBackReference,您应该使用特定的 Reference 名称来区分它们。

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;

关于java - com.fasterxml.jackson.databind.JsonMappingException : Multiple back-reference properties with name 'defaultReference' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43973041/

相关文章:

java - 在 java 中,为什么自定义异常也应该有一个参数为 'Throwable cause' 的构造函数

java - NullPointerException InAppBilling.IabHelper.launchPurchaseFlow(IabHelper.java :356)

java - 将 StringBuilder 附加到 JTextArea

javascript - 如何在 Spring Boot 中的提交表单中将变量传递给 Controller ​​?

java - 如何使用接口(interface)声明 DAO 变量,但在 Spring 框架中放入具体实现?

hibernate : CascadeType. PERSIST不起作用,但是用CascadeType.ALL保存对象

java - 找不到 Log4jConfigListener -- 上下文无法启动

java - 使用 Hibernate 4's Integrator pattern and Spring' 的依赖注入(inject)

json - 成功调用 URL 后,Spring RESTful Web 服务返回 404

java - 我们可以在 Spring data jpa @Query 中调用或组合 Select 和过程吗