No entiendo cuál es la diferencia real entre anotaciones javax.transaction.Transactionaly org.springframework.transaction.annotation.Transactional?
¿Es org.springframework.transaction.annotation.Transactionaluna extensión javax.transaction.Transactionalo tienen un significado totalmente diferente? ¿Cuándo deben usarse cada uno de ellos? ¿Primavera @Transactinalen la capa de servicio y Java en DAO?
Gracias por responder.

javax.transaction.Transactionalque ahora se pueda usar también en aplicaciones Spring sin ninguna acción adicional. En mi opinión, esta fue una decisión bastante mala desde el punto de vista del diseño , porque, según mi experiencia, muchos desarrolladores confunden inconscientemente a estos dos en su código, lo que lleva a problemas posteriores.org.springframework.transaction.annotation.Transactionalofrece más opciones (comoreadOnly,timeout) quejavax.transaction.TransactionalOtra diferencia es cómo Spring maneja las anotaciones @Transactional
javax.ejb.TransactionAttributeestá disponible en el classpath (de la versión 2.5.3 a 3.2.5). Por lo tanto, puede terminar sin tener en cuenta sus anotaciones si solojavax.transaction.Transactionalestá en su classpath y nojavax.ejb.TransactionAttribute. Este puede ser el caso si está trabajando con Hibernate: hibernate-core (4.3.7.Final) depende de jboss-transaction-api_1.2_spec (1.0.0.Final), que no proporcionajavax.ejb.TransactionAttribute.fuente
Tenga cuidado, (este problema ocurrió en tomcat),
Si su aplicación es la aplicación web SPRING y está utilizando el mecanismo de manejo de transacciones de Spring
@org.springframework.transaction.annotation.Transactional, entonces no lo mezcle con javax.transaction.Transactional.Eso es siempre uso,
@org.springframework.transaction.annotation.Transactionalen una aplicación de primavera consistentemente.De lo contrario, podemos terminar con este error,
fuente
Alcance de transacción declarativa
Tanto la
@Transactionanotación Spring como la JPA le permiten definir el alcance de una transacción de aplicación determinada.Entonces, si un método de servicio se anota con la
@Transactionalanotación, se ejecutará en un contexto transaccional. Si el método de servicio utiliza múltiples DAO o repositorios, todas las operaciones de lectura y escritura se ejecutarán en la misma transacción de la base de datos.Primavera
@TransactionalLa
org.springframework.transaction.annotation.Transactionalanotación ha estado disponible desde la versión 1.2 del marco Spring (circa 2005), y le permite establecer las siguientes propiedades transaccionales:isolation: el nivel de aislamiento de la base de datos subyacentenoRollbackForynoRollbackForClassName: la lista deExceptionclases Java que se pueden activar sin activar una reversión de transacciónrollbackForyrollbackForClassName: la lista deExceptionclases Java que desencadenan una reversión de transacción cuando se lanzapropagation: el tipo de propagación de transacción dado porPropagationEnum. Por ejemplo, si el contexto de la transacción se puede heredar (por ejemplo,REQUIRED) o se debe crear un nuevo contexto de transacción (por ejemplo,REQUIRES_NEW) o si se debe lanzar una excepción si no está presente el contexto de la transacción (por ejemplo,MANDATORY) o si se debe lanzar una excepción si se encuentra un contexto de transacción actual (por ejemplo,NOT_SUPPORTED).readOnly: si la transacción actual solo debería leer datos sin aplicar ningún cambio.timeout: cuántos segundos se debe permitir que se ejecute el contexto de la transacción hasta que se produzca una excepción de tiempo de espera.valueotransactionManager: el nombre delTransactionManagerbean Spring que se utilizará al vincular el contexto de la transacción.Java EE
@TransactionalLa
javax.transaction.Transactionalanotación fue agregada por la especificación Java EE 7 (circa 2013). Entonces, la anotación Java EE se agregó 8 años después que su contraparte de Spring.Java EE
@Transactionaldefine solo 3 atributos:dontRollbackOn: la lista deExceptionclases Java que se pueden activar sin activar una reversión de transacciónrollbackOn: la lista deExceptionclases Java que desencadenan una reversión de transacción cuando se lanzavalue: la estrategia de propagación, dada por laTxTypeEnum. Por ejemplo, si el contexto de la transacción se puede heredar (por ejemplo,REQUIRED) o se debe crear un nuevo contexto de transacción (por ejemplo,REQUIRES_NEW) o si se debe lanzar una excepción si no está presente el contexto de la transacción (por ejemplo,MANDATORY) o si se debe lanzar una excepción si se encuentra un contexto de transacción actual (por ejemplo,NOT_SUPPORTED).¿Cuál elegir?
Si está usando Spring o Spring Boot, use la
@Transactionalanotación Spring , ya que le permite configurar más atributos que la@Transactionalanotación Java EE .Si usa Java EE solo y despliega su aplicación en un servidor de aplicaciones Java EE, use la anotación Java EE `` @ Transactional`.
fuente