Java Reference
In-Depth Information
was necessary because of entity beans. The fact that EJB 3 detached entities are nothing
but POJOs makes the DTO anti-pattern less of a necessity of life. Instead of having to cre-
ate separate DTOs from domain data just to pass back and forth between the business and
presentation layers, you may simply pass detached entities. This is exactly the model fol-
lowed in this chapter.
But if your entities contain behavior, you might be better off using the DTO pattern anyway,
to safeguard business logic from inappropriate usage outside a transactional context. In any
case, if you decide to use detached entities as a substitute for DTOs, you should make sure
they're marked
java.io.Serializable
.
10.2.4. Deleting entities
from the database. An important detail to notice about the
deleteItem
method (repeated
next) is that the
Item
to be deleted was first attached to the
EntityManager
using the
merge
method:
public void deleteItem(Item item) {
entityManager.remove(entityManager.merge(item));
}
This is because the
remove
method can only delete currently attached entities and the
Item
entity being passed to the
deleteItem
method isn't managed. If a detached entity
is passed to the
remove
method, it throws an
IllegalArgumentException
. Before
the
deleteItem
method returns, the
Item
record will be deleted from the database us-
ing a
DELETE
statement like this:
DELETE FROM ITEMS WHERE item_id = 1
Just as with the
persist
and
merge
methods, the
DELETE
statement isn't necessarily
issued immediately but is guaranteed to be issued at some point. Meanwhile, the
EntityManager
marks the entity as removed so that no further changes to it are syn-
chronized (as we noted in the previous section).