JpaRepositoryのfindAll()メソッドでは、オブジェクトの浅いコピーを返します。

ローハン・シャー:

私が使用してエンティティのリスト取得しようとしていますJpaRepositoryfindAll()ように、他のオブジェクトの数を持っている私が取得しようとしているというメソッドを、しかしエンティティOneToManyその中関係。

私はクラスを持ってProgram次のように:

@Entity
public class Program extends BaseEntity {

    private String programTitle;

    private String description;

    private String programType;

    private String price;

    @OneToMany(mappedBy = "program", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    @JsonManagedReference(value = "program-benefit")
    private List<Benefit> benefits = new ArrayList<>();

    @Column(name = "category")
    private String category;
    //Getters and setters
    }

あなたが見ることができるように、それはのリストを持っているBenefitsことに。

私はプログラムを検索しようとしていたとき、私はどちらも、同様にそれのようにオブジェクトリスト持っているJSONを取得しています:

私は取得しています回答:

{
    "id":1,
    "category": "cardio",
    "description": "exercies for cardio",
    "benefit": [
        {
            "description": "good for healt"
        },
        {
            "description": "string2"
        }
    ],
    "price": "50",
    "program_title": "cardio demo"
}

しかし、私はのようなオブジェクトの簡易コピーをしたいです

予想される応答:

{
    "id":1,
    "category": "cardio",
    "description": "exercies for cardio",
    "price": "50",
    "program_title": "cardio demo"
}

私は変更しようとしたCascadeType私が呼ぶとき、私はネストされたオブジェクトが削除されるようにしたいが、それはすべてのAPIでネストされたオブジェクトを示す停止するfindAll()方法を。

私が呼ぶとき、ネストされたオブジェクトの表示を停止する方法があるfindAll()方法は?

アンドロニカス:

私は2つの選択肢を参照してください。

  1. あなたがフェッチされたフィールドをシリアライズ避けたい場合は、使用@JsonIgnore

  2. あなたはすべてのこれらのフィールドを取得したくない場合は、DTOを作成して、結果をマッピングするためのカスタムクエリを記述します。

    public class ProgramDTO {
    
        private Long id;
        private String programTitle;
        private String description;
        private String programType;
        private String price;
    
    }
    

    その後:

    entityManager
        .createQuery("select new ProgramDTO(p.id, p.programTitle, p.description, p.programType, p.price from Program p")
        .getResultList();
    

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=280151&siteId=1