Reputation: 2366
My code below:
int userId = 42;
String stringIdBook = "42";
User user = daoUser.getUser(userId);
List<Books> booksOrderedByUser = user.getBooks();
for (Books x : booksOrderedByUser) {
System.out.println(x.getTitle());
}
for (Books x : booksOrderedByUser) {
String idBookString = Integer.toString(x.getIdBook());
if (idBookString == stringIdBook) {
booksOrderedByUser.remove(x.getIdBook());
break;
}
}
for (Books x : booksOrderedByUser) {
System.out.println(x.getTitle());
}
entityManager.getTransaction().begin();
entityManager.merge(booksOrderedByUser);
entityManager.flush();
entityManager.getTransaction().commit();
entityManager.close();
When i run this jpa i got this exception:
org.hibernate.MappingException: Unknown entity: org.hibernate.collection.internal.PersistentBag
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:776)
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1451)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:147)
at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:69)
at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:839)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:821)
at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:826)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1161)
at servlet.returnBookServlet.doPost(returnBookServlet.java:59)
This code gets list of books which belong to user and delete selected. First issue is book isn't removed(I print list of books via System.out.println()
and list is same before and after booksOrderedByUser.remove(x.getIdBook()
). Second issue is this exception during merge. Can someone tell me what I did wrong?
Upvotes: 0
Views: 1374
Reputation: 17524
First of all, use equals
to compare String values, not ==
.
Second thing is, your List
contains Books
objects, so calling :
remove(x.getIdBook())
has no chance to succeed.
What you want here is removing a Books
object from the list, not a String
object or whatever, so go this way :
remove(x)
Finally, you may want to rename your Books
class to Book
, since it represents only one book .
Upvotes: 2