Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boucle infini avec JPA

    17 juin 2021 à 15:09:20

    Bonjour,

    Je construis une API avec Spring et JPA. Sauf que j'ai un soucis de boucle infini dans le JSON retourné. Je ne trouve pas la source de ce problème, sachant que la seul chose que me permet de ne pas l'avoir est de rajouter l'annotation @JsonIgnore, ce que je ne cherche pas à faire puisque je cherche à remonter les informations des deux objets.

    Merci de votre aide

    package fr.sportingo.api.model;
    
    import com.fasterxml.jackson.annotation.JsonManagedReference;
    import lombok.Data;
    
    import javax.persistence.*;
    import java.util.*;
    
    @Data
    @Entity
    @Table(name = "users")
    @Inheritance(strategy = InheritanceType.JOINED)
    public class Users
    {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @Column(name = "civility", length = 8)
        private String civility;
    
        @Column(name = "firstname", length = 50)
        private String firstname;
    
        @Column(name = "lastname", length = 50)
        private String lastname;
    
        @Column(name = "birthday")
        private Date birthday;
    
        @Column(name = "email", length = 100, unique = true)
        private String email;
    
        @Column(name = "password", length = 255)
        private String password;
    
        @Column(name = "is_admin", length = 1)
        private Integer isAdmin;
    
        @Column(name = "is_disabled", length = 1)
        private Integer isDisabled;
    
        @OneToMany(mappedBy = "users")
        //@JsonManagedReference
        private List<UsersRegistration> usersRegistrations = new ArrayList<>();
    }
    
    package fr.sportingo.api.model;
    
    import com.fasterxml.jackson.annotation.JsonManagedReference;
    import lombok.Data;
    
    import javax.persistence.*;
    import java.util.*;
    
    @Data
    @Entity
    @Table(name = "events")
    public class Events
    {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @Column(name = "image", length = 255)
        private String image;
    
        @Column(name = "name", length = 50)
        private String name;
    
        @Column(name = "description")
        private String description;
    
        @Column(name = "date_hours")
        private Date dateHours;
    
        @Column(name = "minimum_birthday")
        private Date minimumBirthday;
    
        @Column(name = "number_places", length = 11)
        private Integer nbPlaces;
    
        @Column(name = "longitude")
        private Double longitude;
    
        @Column(name = "latitude")
        private Double latitude;
    
        @Column(name = "is_verified", length = 1)
        private Integer isVerified;
    
        @Column(name = "is_disabled", length = 1)
        private Integer isDisabled;
    
        @ManyToMany
        @JoinTable(name = "events_category",
                joinColumns = @JoinColumn(name = "id_events"),
                inverseJoinColumns = @JoinColumn(name = "id_category"))
        private List<Category> categories = new ArrayList<>();
    
        @OneToMany(mappedBy = "events")
        //@JsonManagedReference
        private List<UsersRegistration> usersRegistrations = new ArrayList<>();
    }
    
    package fr.sportingo.api.model;
    
    import com.fasterxml.jackson.annotation.JsonBackReference;
    import lombok.Data;
    
    import javax.persistence.*;
    
    @Data
    @Entity
    @Table(name = "users_registration")
    public class UsersRegistration
    {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        //@EmbeddedId
        //private UsersRegistrationKey usersRegistrationKey;
    
        @ManyToOne
        //@MapsId("idUsers")
        @JoinColumn(name = "id_users")
        //@JsonBackReference
        private Users users;
    
        @ManyToOne
        //@MapsId("idEvents")
        @JoinColumn(name = "id_events")
        //@JsonBackReference
        private Events events;
    
        @Column(name = "is_accepted", length = 1)
        private Integer isAccepted;
    }
    





    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2021 à 0:34:37

      Salut,

      Qu'est-ce que tu essaies de récupérer pour qu'il retourne cette erreur ?

      Je soupçonne que tu fetches une UserRegistration en eager et qu'il y a des relations cycliques entre UserRegistration et Users, ou entre UserRegistration et Events.

      Par exemple : tu essaie de récupérer UserRegistration, qui essaie de récupérer Users, puis dans Users il y a une List<UsersRegistration> qui récupère à nouveau les UserRegistration, puis il tombe sur celle que tu voulais récupérer dès le départ, et rebelotte.

      Si tel est le cas, il serait préférable d'avoir un endpoint où tu retournes la UserRegistration :

      /api/user_registrations/

      Puis un autre endpoint où tu retournes ses Users :


      /api/user_registrations/{id}/users

      -
      Edité par Scroph 18 juin 2021 à 0:35:06

      • Partager sur Facebook
      • Partager sur Twitter

      Boucle infini avec JPA

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown