我知道如何在纯hibernate中用@manytomany关系持久化实体。但如何在Spring正确地做到这一点呢?
在休眠状态下:
EntityManager em = getEntityManager();
em.getTransaction.begin();
Book book = new Book("title", "isbn");
Category category = new Category("horror");
category.addBook(book);
em.persist(book);
em.getTransaction().commit();
em.getTransaction().close();
像这样的。但是Spring呢,假设我有 @Service
从@restcontroller接收book或bookdto。
public void saveBook(Book book) {
//what now
}
我应该做的是 bookRepository.save(book);
足以挽救这个“多人关系”吗?我不需要像addbook,addcategory,removebook等其他方法吗。?
先谢谢你。
2条答案
按热度按时间3lxsmp7m1#
spring的存储库除了 Package entitymanager并执行它的persist方法之外什么也没做。您可以看看默认实现
这就是为什么“纯hibernate”中的任何可能都可以通过spring的存储库和几个注解实现
注1:使用Spring时,最有可能使用
@Transactional
注解,这就是为什么需要小心在方法之间传递的实体。注意2您所说的“纯hibernate”实际上是“纯jpa”,没有提到hibernate。hibernate可能是您的jpa实现。
k3bvogb12#
使用spring boot处理实体状态管理的标准方法是:
创建带有@entity注解的实体类(我想您已经完成了),例如book.class实体;
创建扩展jparepository<t,id>的存储库接口,其中t是实体类(为book创建一个,为category创建另一个),id是实体类的主键。这将为您提供许多有用的存储库方法的默认实现的优势,如save()、findonebyid()等;
假设已将long设置为book实体的主键;
在服务类中注入存储库;
现在您可以像这样使用服务类和方法:
回答你的第二个问题-是的,你必须注意保持两个实体的关系同步,这是无法摆脱的。所以在@manytomany关系中,您必须将category添加到book categories集合,反之亦然。