春季,JPA:列表包含值时,一对一的错误

发布于 2025-02-02 19:49:46 字数 3128 浏览 2 评论 0原文

我想在JSON中返回一个配置文件对象,其中包含与社交网络关联的登录详细信息列表。

当“ reseaux_sociaux”表为空时,一切正常。对于我的状态表,我在个人资料对象中以JSON格式获得状态。但是,当“ reseaux_sociaux”包含值时,我会在下面获得错误,并且我的个人资料对象以JSON格式返回...

(logs)

Reseau

@Entity
@Table(name = "Profil")
public class Profil {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long Id;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "IdComptes", nullable = false)
    private Comptes IdComptes;
    private String Avatar;
    private String Banniere;
    private String Pseudo;
    private String MailPro;
    private String Bio;

    @ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(name = "Statut_Profil", joinColumns = @JoinColumn(referencedColumnName = "Id"),inverseJoinColumns = @JoinColumn(referencedColumnName ="Id"))
    private List<Statut> Statut;

    @OneToMany( mappedBy = "IdProfil")
    @JsonManagedReference("id_profil")
    private List<ReseauxSociaux> Reseaux;

    public Profil(){}

    public Profil(Long id, Comptes idComptes, String avatar, String banniere, String pseudo, String mailPro, String bio) {
        Id = id;
        IdComptes = idComptes;
        Avatar = avatar;
        Banniere = banniere;
        Pseudo = pseudo;
        MailPro = mailPro;
        Bio = bio;
    }
}

Ociaux类

@Entity
@IdClass(ReseauxId.class)
public class ReseauxSociaux {
    @Id
    private int Id;
    @Id
    private Long IdProfil;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "IdProfil", insertable = false, updatable = false)
    @JsonBackReference("id_profil")
    private Profil Profil;


    @ManyToOne
    @JoinColumn(name = "Id", insertable = false, updatable = false)
    @JsonBackReference("id")
    private Reseau Reseau;

    private String Identifiant;


    private ReseauxSociaux()
    {}

    public ReseauxSociaux(int id, Long idProfil, String identifiant) {
        Id = id;
        IdProfil = idProfil;

        Identifiant = identifiant;
    }
}

@Entity
public class Reseau {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int Id;
    private String Nom;
    private String Couleur;

    //I tried it with and without and it made no difference
    @OneToMany( mappedBy = "Id")
    @JsonManagedReference("id")
    private List<ReseauxSociaux> Reseaux;

    public Reseau(){}

    public Reseau(int id, String nom, String couleur) {
        Id = id;
        Nom = nom;
        Couleur = couleur;
    }
//Get Set
}

profil控制器

@RestController
@RequestMapping("/profil")
public class ProfilController {

    private final ProfilRepository profilRepository;

    public ProfilController(ProfilRepository profilRepository) {
        this.profilRepository = profilRepository;
    }

    @PostMapping("/getprofil/{idCompte}")
    Profil GetProfil(@PathVariable("idCompte") Long idCompte)
    {
        Profil profil= profilRepository.findProfilById(idCompte);
        return profil;
    }
}

I want to return a Profile Object in JSON containing a list of login details associated with a social network.

Everything works correctly when the "reseaux_sociaux" table is empty. For my status table I get my statuses in JSON format in my Profile object. However, when "reseaux_sociaux" contains values then I get the error below and my Profile object in JSON format is not returned...

(Logs)

https://cloudvyzor.com/logpad/?query&database=sandbox-7fb06b2c06f198a7c0e4ff7c74d659e0

Profil Class

@Entity
@Table(name = "Profil")
public class Profil {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long Id;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "IdComptes", nullable = false)
    private Comptes IdComptes;
    private String Avatar;
    private String Banniere;
    private String Pseudo;
    private String MailPro;
    private String Bio;

    @ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(name = "Statut_Profil", joinColumns = @JoinColumn(referencedColumnName = "Id"),inverseJoinColumns = @JoinColumn(referencedColumnName ="Id"))
    private List<Statut> Statut;

    @OneToMany( mappedBy = "IdProfil")
    @JsonManagedReference("id_profil")
    private List<ReseauxSociaux> Reseaux;

    public Profil(){}

    public Profil(Long id, Comptes idComptes, String avatar, String banniere, String pseudo, String mailPro, String bio) {
        Id = id;
        IdComptes = idComptes;
        Avatar = avatar;
        Banniere = banniere;
        Pseudo = pseudo;
        MailPro = mailPro;
        Bio = bio;
    }
}

ReseauxSociaux Class

@Entity
@IdClass(ReseauxId.class)
public class ReseauxSociaux {
    @Id
    private int Id;
    @Id
    private Long IdProfil;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "IdProfil", insertable = false, updatable = false)
    @JsonBackReference("id_profil")
    private Profil Profil;


    @ManyToOne
    @JoinColumn(name = "Id", insertable = false, updatable = false)
    @JsonBackReference("id")
    private Reseau Reseau;

    private String Identifiant;


    private ReseauxSociaux()
    {}

    public ReseauxSociaux(int id, Long idProfil, String identifiant) {
        Id = id;
        IdProfil = idProfil;

        Identifiant = identifiant;
    }
}

Reseau class

@Entity
public class Reseau {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int Id;
    private String Nom;
    private String Couleur;

    //I tried it with and without and it made no difference
    @OneToMany( mappedBy = "Id")
    @JsonManagedReference("id")
    private List<ReseauxSociaux> Reseaux;

    public Reseau(){}

    public Reseau(int id, String nom, String couleur) {
        Id = id;
        Nom = nom;
        Couleur = couleur;
    }
//Get Set
}

Profil Controller

@RestController
@RequestMapping("/profil")
public class ProfilController {

    private final ProfilRepository profilRepository;

    public ProfilController(ProfilRepository profilRepository) {
        this.profilRepository = profilRepository;
    }

    @PostMapping("/getprofil/{idCompte}")
    Profil GetProfil(@PathVariable("idCompte") Long idCompte)
    {
        Profil profil= profilRepository.findProfilById(idCompte);
        return profil;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沫雨熙 2025-02-09 19:49:46

我终于成功了……问题的原因尚不清楚,但我有两个假设:第一个是在可变名称上使用大写字母;第二个是在两个实体中使用相同名称的OneTomany使用列表。

profil类

@Entity
@Table(name = "Profil")
public class Profil {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "idComptes", nullable = false)
    @JsonBackReference("id_comptes")
    private Comptes idComptes;
    private String avatar;
    private String banniere;
    private String pseudo;
    private String mailPro;
    private String bio;

    @ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(name = "statut_profil", joinColumns = @JoinColumn(referencedColumnName = "id"),inverseJoinColumns = @JoinColumn(referencedColumnName ="id"))
    private List<Statut> statut;

    @OneToMany( mappedBy = "idProfil")
    @JsonManagedReference("id_profil")
    private List<ReseauxSociaux> lstprofil;

    public Profil(){}

    public Profil(Long id, Comptes idComptes, String avatar, String banniere, String pseudo, String mailPro, String bio) {
        this.id = id;
        this.idComptes = idComptes;
        this.avatar = avatar;
        this.banniere = banniere;
        this.pseudo = pseudo;
        this.mailPro = mailPro;
        this.bio = bio;
    }
//get set
}

Reseauxsociaux类

    @Entity
    @IdClass(ReseauxId.class)
    public class ReseauxSociaux {
        @Id
        private int id;
        @ManyToOne
        @JoinColumn(name = "id", insertable = false, updatable = false)
        @JsonBackReference("id_reseau")
        private Reseau reseau;
    
        @Id
        private Long idProfil;
    
        @ManyToOne
        @JoinColumn(name = "idProfil", insertable = false, updatable = false)
        @JsonBackReference("id_profil")
        private Profil profil;
    
    
        private String identifiant;
    
    
        private ReseauxSociaux()
        {}
    
    
        public ReseauxSociaux(int id, Reseau reseau, Long idProfil, String identifiant) {
            this.id = id;
            this.reseau = reseau;
            this.idProfil = idProfil;
            this.identifiant = identifiant;
        }
}

Reseau类

@Entity
public class Reseau {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String nom;
    private String couleur;

    @OneToMany( mappedBy = "id")
    @JsonManagedReference("id_reseau")
    private List<ReseauxSociaux> lstreseau;

    public Reseau(){}

    public Reseau(int id, String nom, String couleur) {
        this.id = id;
        this.nom = nom;
        this.couleur = couleur;
    }
}

I finally succeeded... The cause of the problem remains unclear but I have two hypotheses: the first is the use of capital letters on variable names; the second is the use of a list with the onetomany with the same name in two entities.

Profil class

@Entity
@Table(name = "Profil")
public class Profil {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "idComptes", nullable = false)
    @JsonBackReference("id_comptes")
    private Comptes idComptes;
    private String avatar;
    private String banniere;
    private String pseudo;
    private String mailPro;
    private String bio;

    @ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinTable(name = "statut_profil", joinColumns = @JoinColumn(referencedColumnName = "id"),inverseJoinColumns = @JoinColumn(referencedColumnName ="id"))
    private List<Statut> statut;

    @OneToMany( mappedBy = "idProfil")
    @JsonManagedReference("id_profil")
    private List<ReseauxSociaux> lstprofil;

    public Profil(){}

    public Profil(Long id, Comptes idComptes, String avatar, String banniere, String pseudo, String mailPro, String bio) {
        this.id = id;
        this.idComptes = idComptes;
        this.avatar = avatar;
        this.banniere = banniere;
        this.pseudo = pseudo;
        this.mailPro = mailPro;
        this.bio = bio;
    }
//get set
}

ReseauxSociaux class

    @Entity
    @IdClass(ReseauxId.class)
    public class ReseauxSociaux {
        @Id
        private int id;
        @ManyToOne
        @JoinColumn(name = "id", insertable = false, updatable = false)
        @JsonBackReference("id_reseau")
        private Reseau reseau;
    
        @Id
        private Long idProfil;
    
        @ManyToOne
        @JoinColumn(name = "idProfil", insertable = false, updatable = false)
        @JsonBackReference("id_profil")
        private Profil profil;
    
    
        private String identifiant;
    
    
        private ReseauxSociaux()
        {}
    
    
        public ReseauxSociaux(int id, Reseau reseau, Long idProfil, String identifiant) {
            this.id = id;
            this.reseau = reseau;
            this.idProfil = idProfil;
            this.identifiant = identifiant;
        }
}

Reseau class

@Entity
public class Reseau {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String nom;
    private String couleur;

    @OneToMany( mappedBy = "id")
    @JsonManagedReference("id_reseau")
    private List<ReseauxSociaux> lstreseau;

    public Reseau(){}

    public Reseau(int id, String nom, String couleur) {
        this.id = id;
        this.nom = nom;
        this.couleur = couleur;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文