Otra SCBCD hoy día: EntityManager.remove()

(Imagen: Paul Cézanne  - Retrato del tío Dominique)

A developer implemented a Java class called Store. The class is annotated correctly to act as an Entity. The developer created a stateless session bean to create, lookup, and remove Store objects. This session bean has a container managed entity manager injected into field em and a removeStore method with transaction attribute REQUIRED.

Given the following code:

32. public void removeStore(Store store){
33. em.remove(store);
34. }

What is a possible reason that an IllegalArgumentException is thrown al Line 33 when the removeStore method is called by a remote client?

  • The passed object is NOT serializable
  • The passed object is NOT found in the database
  • The passed object is NOT managed by the entity manager
  • There is no active transaction to manage the database remove

Una entidad puede ser borrada de base de datos invocando al método EntityManager.remove(). La operación remove() no borra inmediatamente los registros de la base de datos. Cuando el entity manager decide dar flush, se ejecuta una setencia SQL DELETE.

El método remove () lanza una IllegalArgumentException si el parámetro que recibe no es del tipo entidad (pero según la pregunta, esto no sucede). Se lanza la excepción TransactionRequiredException cuando no ejecuta en un contexto transaccional (pero como su atributo de transacción es REQUIRED, esto tampoco sucede).Si la entidad parámetro es una entidad "DETACHED" (o sea, no es administrada por el Entity Mannager), se lanza la excepción IllegalArgumentException... por lo que nuestra respuesta es la tercera.




Pregunta tomada de ExamWorx

Publicar un comentario