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
相关产品推荐
相关产品推荐

