Perché il mio metodo toString () non funziona e come impedire i ritorni nidificati in SpringBootJPA?

Aug 24 2020

Ho due entità, partner e campagna, quindi ho creato una relazione unidirezionale "Uno a molti".

Questa è la mia entità partner :

@Entity
@Table(name = "partner")
@EntityListeners(AuditingEntityListener.class)
public class Partner {

    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    private String id;

    @NotNull
    @Column(name = "partner_name")
    private String partnerName;

    @NotNull
    @Column(name = "partner_code")
    private String partnerCode;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "partner_id")
    private List<Campaign> campaigns = new ArrayList<>();

    // constructos, getters, setters, equals, hashcode

    @Override
    public String toString() {
        return "Partner{" +
                "id='" + id + '\'' +
                ", partnerName='" + partnerName + '\'' +
                ", partnerCode='" + partnerCode + '\'' +
                '}';
    }

Questa è la mia entità campagna :

@Entity
@Table(name = "campaign")
@EntityListeners(AuditingEntityListener.class)
public class Campaign {

    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    private String id;

    @NotNull
    @Column(name = "partner_name")
    private String partnerName;

    @NotNull
    @Column(name = "partner_code")
    private String partnerCode;

    @NotNull
    @Column(name = "campaign_name")
    private String campaignName;

    @NotNull
    @Column(name = "campaign_code")
    private String campaignCode;

    // constructos, getters, setters, equals, hashcode

    @Override
    public String toString() {
        return "Campaign{" +
                "id='" + id + '\'' +
                ", partnerName='" + partnerName + '\'' +
                ", partnerCode='" + partnerCode + '\'' +
                ", campaignName='" + campaignName + '\'' +
                ", campaignCode='" + campaignCode + '\'' +
                '}';
    }
    

Tuttavia, quando chiamo il metodo findAll () per i partner, questa è la mia risposta:

Quello di cui ho bisogno è non ottenere l'attributo Campaigns nella risposta quando ottengo il metodo partners findAll (). Non capisco perché il mio metodo toString non funzioni, se ho definito solo cosa stampare id, partnerName e partnerCode.

Quindi non voglio una risposta annidata.

Grazie in anticipo.

Risposte

3 Dheeraj Aug 23 2020 at 23:20

Puoi usarlo @JsonIgnoreper ignorarlo o puoi aggiungere un attributo alla tua @OneToManyannotazione per caricarlo pigramente. Sostituiscilo con:

@OneToMany(fetch=FetchType.Lazy, cascade = CascadeType.ALL, orphanRemoval = true)