【发布时间】:2021-01-12 16:51:15
【问题描述】:
我在我的应用程序中使用 Spring Data Jpa。应用程序中有两个实体。实体Film:
//annotations omitted
public class Film {
// other annotations omitted
@ManyToMany(fetch = FetchType.EAGER)
private List<User> users;
...
和User:
//annotations omitted
public class User {
// other annotations omitted
@ManyToMany(fetch = FetchType.LAZY)
private List<Film> films;
...
还有Film 的 DTO:
public class FilmTo implements Serializable {
private List<Integer> userIds; // i using users ids instead of users for simplify REST-requests
}
并且该应用程序具有存储库类:
@Transactional(readOnly = true)
public interface CrudFilmRepository extends JpaRepository<Film, Integer> {
}
@Transactional(readOnly = true)
public interface CrudUserRepository extends JpaRepository<User, Integer> {
}
好的。当我想保存新电影时,此代码使用:
@Service
public class FilmService {
@Autowired
private CrudFilmRepository repository;
@Autowired
private CrudUserRepository userRepository;
public Film save(FilmTo filmTo) {
Film film = new Film();
film.setUsers(Arrays.stream(filmTo.getUserIds())
.map(crudUserRepository::getOne)
.collect(Collectors.toList()));
return repository.save(film);
}
当 save() 返回创建的电影时会出现问题,我希望与返回的电影列表中的用户一起工作。即使User list <User> 被标记为 FetchType.EAGER,也会引发 LazyInitializationException!
当我使用用户惰性引用来初始化新电影并尝试保存这部电影时,为什么 crudRepository 忽略 FetchType.EAGER?
【问题讨论】:
标签: java hibernate spring-data-jpa spring-data