使用 jpa 为什么不需要显示调用保存关联表操作? 求推荐相关的书/博客等
21 December 2024 at 16:28
shubiao:
有三张表, 分别是 article 表, tag 表, 和他俩的关联表 article_tag, 就是一个简单的保存操作.
public class Article {
@OneToMany(mappedBy = "article", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private final Set<ArticleTag> articleTags = new HashSet<>();
}
@Transactional
public Article save(Article article, Collection<Tag> tags) {
Article saveArticle = save(article);
List<Tag> saveTagList = tagJpaRepository.saveAll(tags);
for (Tag tag : saveTagList) {
saveArticle.addTag(new ArticleTag(saveArticle, tag));
}
return article;
}
问题 1: 当我不加 @Transactional 时就不会保存到关联表, 加上后在离开该方法时就会触发保存关联表的 sql 执行. 能否给解释一下为什么, 并推荐一些书?
问题 2: 当调用 save(T)方法时, 发现改变的原对象. 所以我没有接收返回值, 当离开该方法时, 就会触发"调用了未持久化对象"异常. 当然, 我也进行了学习 EntityManage 相关的知识, 需要 saveAngFlush(). 但感觉还是不够系统, 有一种雾里看花的感觉
我的情况: 我是一名 Java 老鸟, 但是是 spring jpa(Hibernate) 的初学者, 想了解什么时候应该手动保存? 什么时候可以不接收返回的对象? 我已经读了 spring jpa 的官方文档, 但没找到相应的内容. 官方文档更多是知识点的罗列, 但当我打开真实项目时, 总会发现我有缺少一些隐藏知识(官方团队默认每个人都应该知道的知识)