我正在使用SpringBoot和Hibernate开发应用程序。问题是:当我删除包含的实体时,此操作不会在包含实体上以真实的时间反映出来,但会反映在我的数据库中。(我认为这与Hibernate的上下文或Hibernate的该高速缓存有关)
代码是:
public UserDto deleteMeetPhoto(User user, String photoID) {
PhotoMeet photoAux = photoMeetDao.selectPhotoByIdAndUser(photoID, user.getId());
photoMeetDao.deletePhoto(photoAux.getId(), user.getId());
//Refreshing the user
user = userDao.findById(user.getId()).get();
return new UserDto(user);
}
用户实体代码:
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "user", orphanRemoval = false, cascade = {CascadeType.PERSIST,
CascadeType.MERGE, CascadeType.REMOVE,
CascadeType.DETACH, CascadeType.REFRESH})
private List<PhotoMeet> photos;
PhotoMeet代码:
@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH,
CascadeType.REFRESH, CascadeType.REMOVE }, fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
1条答案
按热度按时间wvyml7n51#
默认情况下,您的关系被标记为延迟加载(fetch = FetchType.LAZY)。这意味着Hibernate只会在您显式访问时加载照片集合。如果你想让修改立即被反映出来,你可以将抓取策略改为FetchType.EAGER:
确保您的方法使用
@Transactional
进行注解。这将正确地管理事务和会话,并且对实体所做的任何更改都将在事务提交时反映出来: