Mantén la atención ya que en esta reseña vas a encontrar el resultado que buscas.Esta crónica ha sido aprobado por nuestros especialistas para garantizar la calidad y veracidad de nuestro contenido.
Solución:
Si usa contenedores administrados EntityManager
entonces estás usando transacciones JTA. Por lo tanto, no necesita (más precisamente, no puede) interferir con EntityManager
Las transacciones obtenidas mediante entityManager.getTransaction()
. El JTA inicia y confirma su transacción.
Si usa la aplicación administrada EntityManager
y no desea ser parte de la transacción JTA, entonces debe administrarlos usted mismo (se denomina administrador de entidad local de recursos).
Por lo general, la aplicación administrada EntityManager
que trabaja con EntityManager.getTransaction()
se utiliza en el entorno Java SE.
EDITAR: Puede que te interese la sección 7.5 Transacciones de control de la especificación JPA 2.0.
En GAE no hay Java EE/JTA, así que ignore términos como transacciones gestionadas por beans (BMT) y transacciones gestionadas por contenedores (CMT).
Su trabajo es transaccional (donde quiere que varios objetos vayan al almacén de datos a la vez, o que todos fallen; aquí es donde tiene que usar getTransaction()), o no transaccional (donde todo va al almacén de datos uno por uno, y el la falla de una persistencia no afecta a otras; aquí es donde simplemente llama a persist()/merge()/remove()).
Google App Engine tiene su gestión de transacciones (https://developers.google.com/appengine/docs/java/datastore/transactions), pero la interfaz de transacciones de JPA no conoce algunas de las funcionalidades subyacentes de GAE (es decir, grupos de entidades).
Por lo tanto, depende de su aplicación decidir qué operaciones realizar en una transacción y cuáles no.
Debe incluir operaciones de transacción que deben ejecutarse atómicamente.
Recuerde como práctica recomendada realizar acciones en cascada y operaciones de relación en una transacción porque JPA podría desencadenar muchas consultas y podría generar una situación de datos inconsistentes.
Ejemplo de uso de transacción con JPA2:
import javax.persistence.EntityTransaction;
EntityTransaction txn = em.getTransaction();
txn.begin();
try
//do something with your database
txn.commit();
finally
if (txn.isActive())
txn.rollback();