[英]JPA - Nothing happens after merge
有人可以告訴我為什么合並實體時什么也沒發生?
User.java(實體)
@ManyToMany(mappedBy="users", targetEntity=Books.class,cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private List<Books> books;
Books.java(實體)
@ManyToMany (targetEntity = User.class,cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private List<User> users;
returnBookServlet.java
int userId = (int) session.getAttribute("userId");
String stringIdBook = request.getParameter("idBook");
UserDAO daoUser = (UserDAO) request.getAttribute("userDao");
User user = daoUser.getUser(userId);
List<Books> booksOrderedByUser = user.getBooks();
for (Books x : booksOrderedByUser) {
String idBookString = Integer.toString(x.getIdBook());
if (idBookString.equals(stringIdBook)) {
booksOrderedByUser.remove(x);
break;
}
}
user.setBooks(booksOrderedByUser);
entityManager.getTransaction().begin();
entityManager.merge(user);
entityManager.flush();
entityManager.getTransaction().commit();
entityManager.close();
在foreach循環之前和之后,我通過System.out.println()
顯示列表,它可以正確刪除所選的書,但是數據庫中什么也沒有發生,我做錯了什么?
User實體中所做的更改不會與您的數據庫同步,因為User實體是雙向ManyToMany關系的非所有者方。 您正在使用User實體中的mappingby =“ users”,因此所有者端是Book實體。
如果您更改ManyToMany的擁有方,則代碼應該可以工作,在ManyToMany雙向關系中,您可以選擇哪一方是您的擁有方(根據JPA 2.1規范):
每個多對多關聯都有兩個方面,即擁有方和非擁有方或反向方。 如果關聯是雙向的,則任何一方都可以指定為擁有方。 如果關系是雙向的,則非擁有方必須使用ManyToMany批注中的mappingBy元素來指定擁有方的關系字段或屬性。
然后,如果要使用相同的代碼,請將注釋更改為:
User.java(實體)
@ManyToMany(targetEntity=Books.class,cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private List<Books> books;
Books.java(實體)
@ManyToMany (mappedBy="books",targetEntity = User.class,cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private List<User> users;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.