ManyToOne、OneToManyを使用していて、データを取得するときに無限ループがあります

ダニック:

ManyToOneとOneToManyを休止状態で使用しています。場所を持つユーザーを作成したいと考えています。postmanでデータを取得するとき、ユーザーを取得するとユーザーの場所が表示され、場所でユーザーが表示されるため、無限ループになります。ここにコードがあります:

ロケーションクラス:

 @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
    @JoinColumn(name=FLD_LOC, nullable=false)
    private Consumer consumers;

    public Consumption(String location, float consumpiton,Consumer consumer) {
        this.location = location;
        this.consumpiton = consumpiton;
        this.consumers=consumer;

    }

ユーザークラス:

@OneToMany(mappedBy = Consumption.FLD_LOC,orphanRemoval = true)
private List<Consumption> locations ;


public Consumer(String clientId, String name,String location, float pwConsumption, String email, String password, String roles) {
    super(clientId, name, email, password, roles);
    this.locations=new ArrayList<>();
    this.location=location;
    this.pwcons=pwConsumption;

}

しかし、データベースでは、usersテーブルに場所の名前を、locationsテーブルにユーザーのIDを格納しています。

これは次のような問題です:

"id": 2,
        "version": 1,
        "updated": "2020-06-28T15:41:49.082",
        "clientId": "admin",
        "name": "admin",
        "email": "[email protected]",
        "password": "$2a$10$hgcTSHjGpxEPg6WNb0U7ouHR5J5YYR5l1XVAejdK8JsG9w2Bko00a",
        "active": true,
        "roles": "ROLE_ADMIN",
        "locations": [
            {
                "locationsid": 1,
                "location": "Pecs",
                "consumpiton": 0.0,
                "consumers": {
                    "id": 2,
                    "version": 1,
                    "updated": "2020-06-28T15:41:49.082",
                    "clientId": "admin",
                    "name": "admin",
                    "email": "[email protected]",
                    "password": "$2a$10$hgcTSHjGpxEPg6WNb0U7ouHR5J5YYR5l1XVAejdK8JsG9w2Bko00a",
                    "active": true,
                    "roles": "ROLE_ADMIN",
                    "locations": [
                        {
                            "locationsid": 1,
                            "location": "Pecs",
                            "consumpiton": 0.0,
                            "consumers": {
                                "id": 2,
                                "version": 1,
                                "updated": "2020-06-28T15:41:49.082",
                                "clientId": "admin",
                                "name": "admin",
                                "email": "[email protected]",
                                "password": "$2a$10$hgcTSHjGpxEPg6WNb0U7ouHR5J5YYR5l1XVAejdK8JsG9w2Bko00a",
                                "active": true,
                                "roles": "ROLE_ADMIN",
                                "locations": [
                                    {
                                        "locationsid": 1,
                                        "location": "Pecs",

JSONの場所の部分に場所の名前またはIDのみを表示させるにはどうすればよいですか?

カビタカランカナパチッピライ:

問題

これは、双方向の関係を持つオブジェクトをシリアル化する必要がある場合の一般的な問題です。

解決

双方向の関係に直面したときに停止する場所をシリアライザーに通知する

  1. 最初のアプローチは、カスタムDTOを作成し、残りのコントローラーから返すことです。DTOでは、移入されますlocationのフィールドcustomerDtolocationDto秒が、あなたはなりませセットcustomerのフィールドをlocationDto、それがnullになります。

  2. 2番目のアプローチはあまり好ましくありません。しかし、とを追加することで@JsonManagedReference再帰的にシリアル化しないようにJacksonライブラリに指示できます@JsonBackReference

  • 交換する
   @OneToMany(mappedBy = Consumption.FLD_LOC,orphanRemoval = true)
   private List<Consumption> locations ;
        with
    @OneToMany(mappedBy = Consumption.FLD_LOC,orphanRemoval = true)
    @JsonManagedReference
    private List<Consumption> locations ;
  • 交換する
    @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
    @JoinColumn(name=FLD_LOC, nullable=false)
    private Consumer consumers;
       with
    @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
    @JoinColumn(name=FLD_LOC, nullable=false)
    @JsonBackReference
    private Consumer consumers;

注意:

実動システムでは、ドメインオブジェクトのすべてのフィールドを公開するわけではありません。外部に公開してはならない内部フィールドが多数存在する可能性があるためです。それが理由です、最初のアプローチが優先されます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ManyToOne、OneToManeを使用していて、データを取得するときに無限ループがあります

分類Dev

Symfony3-ManyToOneとOneToManyを使用してデータを取得する

分類Dev

Microsoft Graph APIを使用しているときに、電子メールが[なし](ユーザーデータの取得中)になる場合があります

分類Dev

変数を終了条件として使用すると、Forループが無限ループになります

分類Dev

mySQLとPrestoDBを使用してタイムスタンプが大きい場合にAWSAthenaでデータ範囲をプルする方法はありますか?

分類Dev

単純な式を解析しようとしていますが、無限ループがあります

分類Dev

リンクリストにデータを追加する関数が無限ループを引き起こしているのは、たまにしかありません

分類Dev

ユーザーのテーブルがあります。idを使用してデータを取得するAPIを書きたいのですが。以下のエラーが出ます。データベースはすでにいっぱいです

分類Dev

列をキーとして使用してデータフレームをマージすると、他の列が無限に繰り返されます

分類Dev

あるデータテーブルからデータを取得しようとしていますが、C#を使用して特定の条件に基づいて別のデータテーブルにデータを入力しようとしていますができません

分類Dev

AjaxとPHPを使用してMySQLにデータを挿入しているときに、限られたデータを取得しますか?

分類Dev

デバッグ情報が無効になっているときにDOM要素のスコープを取得する方法はありますか?

分類Dev

フックを使用してデータをフェッチするときの無限ループ

分類Dev

Incrond Inotifyを使用していますが、ユーザーグループ/権限に問題があります

分類Dev

すべての配列値を取得する方法ですが、phpを使用してwhileループとifループ内で使用しているという制限がありますか?

分類Dev

エースエディタがsocket.ioで無限ループを引き起こしています

分類Dev

データを使用していつでも計算できるデータベースモデルに結果を保存する必要がありますか?

分類Dev

値を使用して関数を呼び出し、RESTNodejsからデータを取得するときの無限ループ

分類Dev

Rails 4 / postgresqlインデックス-無限の数の値を持つことができる日時列をインデックスフィルターとして使用する必要がありますか?

分類Dev

AdministratorAccess権限を取得しているときに、mobilehub:GetProjectを実行する権限がありません。

分類Dev

whileループは無限に実行されます。タイマーを使用してwhileループを終了することはできません

分類Dev

JSONをプルしてデータベースに保存するときに非同期待機機能を使用することに価値はありますか?

分類Dev

遅延読み込みを使用してモジュールをデータと一緒に読み込むと、無限ループが発生します

分類Dev

Tkinterで無限ループが実行されているときに閉じる(X)またはその他のボタンを使用する方法

分類Dev

setInterval()を使用して1秒ごとに出力リストを更新したいのですが、無限ループ出力を取得します

分類Dev

jqueryを使用してデータベースに画像をアップロードしているときにphpでエラーが発生し、変数のデータが渡されない可能性があります

分類Dev

BufferedWriterとFileWriterを使用して、データを同じファイルに書き込むときに同期を実装する必要がありますか?

分類Dev

「CaseWhen」で「AND」を使用しているときにデータベースからデータを取得するときにエラーが発生しました

分類Dev

Apache 2.4で、FedoraにDjangoをデプロイしているときに、「禁止されています。このサーバーで/ static /にアクセスする権限がありません」というエラーが表示されます。

Related 関連記事

  1. 1

    ManyToOne、OneToManeを使用していて、データを取得するときに無限ループがあります

  2. 2

    Symfony3-ManyToOneとOneToManyを使用してデータを取得する

  3. 3

    Microsoft Graph APIを使用しているときに、電子メールが[なし](ユーザーデータの取得中)になる場合があります

  4. 4

    変数を終了条件として使用すると、Forループが無限ループになります

  5. 5

    mySQLとPrestoDBを使用してタイムスタンプが大きい場合にAWSAthenaでデータ範囲をプルする方法はありますか?

  6. 6

    単純な式を解析しようとしていますが、無限ループがあります

  7. 7

    リンクリストにデータを追加する関数が無限ループを引き起こしているのは、たまにしかありません

  8. 8

    ユーザーのテーブルがあります。idを使用してデータを取得するAPIを書きたいのですが。以下のエラーが出ます。データベースはすでにいっぱいです

  9. 9

    列をキーとして使用してデータフレームをマージすると、他の列が無限に繰り返されます

  10. 10

    あるデータテーブルからデータを取得しようとしていますが、C#を使用して特定の条件に基づいて別のデータテーブルにデータを入力しようとしていますができません

  11. 11

    AjaxとPHPを使用してMySQLにデータを挿入しているときに、限られたデータを取得しますか?

  12. 12

    デバッグ情報が無効になっているときにDOM要素のスコープを取得する方法はありますか?

  13. 13

    フックを使用してデータをフェッチするときの無限ループ

  14. 14

    Incrond Inotifyを使用していますが、ユーザーグループ/権限に問題があります

  15. 15

    すべての配列値を取得する方法ですが、phpを使用してwhileループとifループ内で使用しているという制限がありますか?

  16. 16

    エースエディタがsocket.ioで無限ループを引き起こしています

  17. 17

    データを使用していつでも計算できるデータベースモデルに結果を保存する必要がありますか?

  18. 18

    値を使用して関数を呼び出し、RESTNodejsからデータを取得するときの無限ループ

  19. 19

    Rails 4 / postgresqlインデックス-無限の数の値を持つことができる日時列をインデックスフィルターとして使用する必要がありますか?

  20. 20

    AdministratorAccess権限を取得しているときに、mobilehub:GetProjectを実行する権限がありません。

  21. 21

    whileループは無限に実行されます。タイマーを使用してwhileループを終了することはできません

  22. 22

    JSONをプルしてデータベースに保存するときに非同期待機機能を使用することに価値はありますか?

  23. 23

    遅延読み込みを使用してモジュールをデータと一緒に読み込むと、無限ループが発生します

  24. 24

    Tkinterで無限ループが実行されているときに閉じる(X)またはその他のボタンを使用する方法

  25. 25

    setInterval()を使用して1秒ごとに出力リストを更新したいのですが、無限ループ出力を取得します

  26. 26

    jqueryを使用してデータベースに画像をアップロードしているときにphpでエラーが発生し、変数のデータが渡されない可能性があります

  27. 27

    BufferedWriterとFileWriterを使用して、データを同じファイルに書き込むときに同期を実装する必要がありますか?

  28. 28

    「CaseWhen」で「AND」を使用しているときにデータベースからデータを取得するときにエラーが発生しました

  29. 29

    Apache 2.4で、FedoraにDjangoをデプロイしているときに、「禁止されています。このサーバーで/ static /にアクセスする権限がありません」というエラーが表示されます。

ホットタグ

アーカイブ