我有以下实体,CrudRepository每个实体都有一个:
@Entity
class Movie {
@Id Long id;
@Column String name;
@ManyToOne Person director;
}
@Entity
class Person {
@Id Long id;
@Column String name;
}
我的控制器看起来像这样:
@RestController
@RequestMapping("/movies")
class MovieController {
private MovieRepository movies = ...;
private PersonRepository people = ...;
@PostMapping
public Movie create(@RequestBody MovieRequest request) {
// Get the director
Person director = people.findById(request.directorId);
// Create the new movie
Movie movie = new Movie();
movie.name = request.name;
movie.director = director;
// Save the new movie
return movies.save(movie);
}
}
class MovieRequest {
String name;
Long directorId
}
如您所见,该create方法首先通过其 id 加载导演,然后创建新电影并最后保存它。这会导致两次访问数据库:第一次检索导演,第二次保存电影。
在这种情况下,这不是什么大问题,但可能存在具有很多关系的实体,这意味着可能会执行大量查询来实现单个插入。
问题:我想在单个数据库操作中保存新电影。有没有办法避免初始人员查询?有没有更好的方法来处理这样的情况?
函数式编程
尚方宝剑之说
相关分类