You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data REST为何忽略Car关联实体Make的级联操作?

背景

我有一个Car实体,与Make实体存在@ManyToOne关联关系:

@Entity
public class Car {
 
  @Id
  Long id;

  @ManyToOne(cascade = CascadeType.ALL)
  Make make;
}

@Entity
public class Make {

  @Id
  Long id;
  String name;
}

Car和Make均拥有对应的仓库:

public interface CarRepository extends CrudRepository<Car, Long> {
}

public interface MakeRepository extends CrudRepository<Make, Long> {
}  
问题

当客户端向Spring Data REST的/api/cars端点发送HTTP POST请求,请求体如下:

{
  "id":null, 
  "make": {
    "id": null,
    "name": "Toyota"
  }
}

新的Car被创建并持久化到数据库,但关联的Make在数据库中被设为null。

预期结果

由于已指定CascadeType.ALL,且Car关联的Make的id为null,我认为新的Make记录应被持久化到数据库,且新Car记录的Make外键(即makeId)应指向该新Make记录。

观察结果
  • 若Make没有对应的仓库(即删除MakeRepository),则Make会按预期被持久化并与新Car关联。
  • 若在Car的make字段上添加@RestResource(exported = false)注解,则Make会按预期被持久化并与新Car关联。
  • 若先保存Make再关联到Car,则Make显然会被持久化并与新Car关联。
疑问

是否存在无需为make字段添加@RestResource注解或无需单独保存Make的方式,即可在创建Car时保存关联的Make?在哪里可以找到描述该行为的Spring官方文档?


内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:20:16