我有一个像这样的嵌套对象
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中,值是这样的
当我尝试更新CHART对象时,它会给我MySQLIntegrityConstraintViolationException:无法添加或更新子行:外键约束失败(chartpro
。chart_ydata
,CONSTRAINT fk_ydata_to_group
FOREIGN KEY(group_id
)参考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
}]
答案 0 :(得分:0)
我认为您必须手动设置ChartYData实体中的group_id,因为您没有使用json对象发送group_id,或者通过javascript处理它以在发送之前将group_id添加到ChartYData。