[英]How to correctly save entity with @ManyToMany in Spring Boot?
我知道如何在純 Hibernate 中保持具有 @ManyToMany 關系的實體。 但是如何在 Spring 中正確地做到這一點?
在 hibernate 中,這將是:
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);
是否足以保存此 @ManyToMany 關系? 我不需要 addBook、addCategory、removeBook 等其他方法嗎?
先感謝您。
Spring 的存儲庫只是包裝 entityManager 並執行它的 persist 方法。 您可以查看默認實現
這就是為什么“純休眠”中的任何可能都可以通過帶有幾個注釋的 Spring 存儲庫實現
注意 1使用 spring 您很可能會用@Transactional
注釋替換事務樣板,這就是為什么您需要小心在方法之間傳遞的實體。
注2你所說的“純休眠”代碼實際上是“純JPA”,沒有提到hibernate。 可能 hibernate 是您的 JPA 實現。
使用 Spring 引導來處理您的實體的 state 管理的標准方法是:
public interface BookRepository extends JPARepository<Book, Long> {}
假設您已將 Long 設置為圖書實體的主鍵;
在服務 class 中注入存儲庫;
現在您可以使用您的服務 class 和方法,如下所示:
@RequiredArgsConstructor
@Service
public class BookService {
private final BookRepository bookRepository;
@Transactional
public void saveBook() {
// just copying the logic from your question
// but normally You would pass it as an argument to the method
Book book = new Book("title", "isbn");
Category category = new Category("horror");
category.addBook(book);
bookRepository.save(book);
}
}
回答你的第二個問題 - 是的,你必須注意保持兩個實體的關系同步,這里沒有辦法擺脫。 因此,在@ManyToMany 關系中,您必須將類別添加到圖書類別集合中,反之亦然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.