0

このようなネストされたオブジェクトがあります

public class Chart {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private long chart_id;

   @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
   @JoinColumn(name="chart_id")
   private Set<ChartGroup> chartGroups;
        /* ..other attributes.. */
}

public class ChartGroup {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private long group_id;
   private long chart_id;

       @OneToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
   @JoinColumn(name="group_id")
   private ChartYData chartYData;
         /* ..other attributes.. */
 }

 public class ChartYData {

   @Id
   private long group_id;

   private String yData;
  }

このデータの取得と保存/更新に使用される REST サービスがあります。特定のグラフのデータをフェッチした後、すべての JSON データを JavaScript オブジェクトに保存します。ユーザーは、チャート内のグループを削除または変更したり、新しいグループを追加したりできます。保存するために完全なチャート オブジェクトをサーバーに送信しています。新しいグループを追加したり、古いグループを削除したりしても、呼び出しは行われません。ユーザーが新しいグループを追加すると、問題が発生します。私のJSONでは、値は次のようになります 投稿データ JSON

CHART オブジェクトを更新しようとすると、MySQLIntegrityConstraintViolationException:Cannot add or update a child row: a foreign key constraint fails ( chartpro. chart_ydata, CONSTRAINT fk_ydata_to_groupFOREIGN KEY ( group_id) REFERENCES chart_group( group_id)が表示されます。

チャート オブジェクト全体を更新する方法はありますか? つまり、JPA は ChartGroup を追加してから、新しく作成された group_id を使用して ChartYData を追加する必要があります。

次の JSON を送信しても同じエラーが発生します (新しいグループの場合は group_id=null を使用)。

  ChartGroups : [{/* data for previously present Chart groups (works fine) */},{
    chartYData :
 { 
            ydata : "ydata",
            group_id : null
          } 
  chart_id:1
  group_id:null
 }]
4

1 に答える 1