toString()メソッドが機能しないのはなぜですか?SpringBootJPAでネストされたリターンを防ぐ方法は?

Aug 24 2020

私はパートナーとキャンペーンの2つのエンティティを持っているので、「1対多」の一方向の関係を作成しました。

これは私のパートナーエンティティです:

@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 + '\'' +
                '}';
    }

これは私のキャンペーンエンティティです:

@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 + '\'' +
                '}';
    }
    

ただし、パートナーに対してfindAll()メソッドを呼び出すと、次のように応答します。

私が必要としているのは、findAll()パートナーメソッドを取得したときに、応答でキャンペーン属性を取得しないことです。id、partnerName、partnerCodeを出力するものだけを定義した場合、toStringメソッドが機能しない理由がわかりません。

したがって、ネストされた応答は必要ありません。

前もって感謝します。

回答

3 Dheeraj Aug 23 2020 at 23:20

を使用@JsonIgnoreして無視することも、@OneToManyアノテーションに属性を追加して遅延ロードすることもできます。次のように置き換えます。

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