Enabling Spring Transactions, javax.persistence.TransactionRequiredException

Никита Михайлов

I know there's a lot of questions about transactions but none of the answers helped me. So, I'm trying to enable transactions in my Spring MVC application but I've no idea why it doesn't work. Here's my config xml

<context:component-scan base-package="ru.tsystems"/>

<bean id="ecareEMF" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="ru.tsystems.persistence.entity"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
        </props>
    </property>
</bean>


<bean id="dataSource"
      class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <!--Some problems with server's time/date-->
    <property name="url"
              value="jdbc:mysql://localhost:3306/ecare?useSSL=false&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>

<bean id="transactionManager"
      class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="ecareEMF"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

I've tried to use @Transactional annotation on my service class, on it's method, on method's of DAO but every time I get the same exception:

2018-04-06 01:27:04 DEBUG UserDAOImpl:34 - javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call

I think I just messed up with configurations, but just in case here's other classes involved in processing. Here's method of controller:

@RequestMapping(value = "/greeting", method = RequestMethod.POST)
public @ResponseBody
String greeting(@Valid UserDTO userDTO, BindingResult result) {
    logger.debug("Attempting to save " + userDTO.toString() + " in db.");
    userMngService.save(userDTO.convertToUser());

    return userDTO.toString();
}

Service:

@Service
@Transactional
public class UserMngService {
    @Autowired
    private UserDAO userDAO;

    public void save(User user) {
        userDAO.persist(user);
    }
}

DAO:

@Repository
public class UserDAOImpl extends GenericDAOImpl<User, Long> implements UserDAO {

}

Generic DAO:

    public abstract class GenericDAOImpl<E, K> implements GenericDAO<E, K> {
    protected Class<E> entityClass;

    @PersistenceContext
    private EntityManager entityManager;

    private static final Logger logger = Logger.getLogger(UserDAOImpl.class);


    @SuppressWarnings("unchecked")
    public GenericDAOImpl(){
        entityClass = (Class<E>) ((ParameterizedType) getClass().getGenericSuperclass())
                .getActualTypeArguments()[0];
    }

    @Override
    public void persist(E entity) {
        try{
            entityManager.persist(entity);
        }catch (PersistenceException e){
            logger.debug(e.toString());
        }
    }

    @Override
    public void delete(E entity) {
        try{
            entityManager.remove(entity);
        }catch (PersistenceException e){

        }
    }

    @Override
    public void update(E entity) {
        try{
            entityManager.merge(entity);
        }catch (PersistenceException e){

        }
    }

    @Override
    public E get(K id) {
        try{
            return entityManager.find(entityClass, id);
        }catch (PersistenceException e){
            return null;
        }
    }

    @Override
    public List<E> getAll() {
        throw new UnsupportedOperationException();
    }
}
Никита Михайлов

I had two config files: app-config.xml and web-config.xml. The latter was for MVC configuration. They both had <context:component-scan base-package="ru.tsystems"/> tag and looks like that was the problem. Here's topic on the forum that helped me to resolve it.

EDIT: typo

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

javax.persistence.TransactionRequiredException:

From Dev

Spring Boot: javax.persistence.TransactionRequiredException: Executing an update/delete query

From Dev

javax.persistence.TransactionRequiredException: No transactional EntityManager available

From Dev

Possible causes of javax.persistence.TransactionRequiredException

From Dev

My entities are not persisting showing javax.persistence.TransactionRequiredException

From Dev

getting javax.persistence.TransactionRequiredException in a container managed Entity Manager

From Dev

Not active transaciotn: javax.persistence.TransactionRequiredException: Executing an update/delete query

From Dev

javax.persistence.TransactionRequiredException Error: jpa 2 + hibernate - Native Query

From Dev

Hibernate, EJB, javax.persistence.TransactionRequiredException: no transaction is in progress

From Dev

My entities are not persisting showing javax.persistence.TransactionRequiredException

From Dev

javax.persistence.TransactionRequiredException: no transaction is in progress, @Transactional(propagation=Propagation.REQUIRED) not working

From Dev

Synchronizing Hibernate persistence + Spring AMQP publish transactions

From Dev

Spring STS javax/persistence/EntityManagerFactory can not found

From Dev

Spring TransactionRequiredException exception

From Dev

Spring JPA (Hibernate) No qualifying bean of type: javax.persistence.EntityManagerFactory

From Dev

Spring boot Hibernate error java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;

From Dev

Error: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey with Spring controller

From Dev

Why has javax.persistence-api been replaced by jakarta.persistence-api in spring data jpa starter?

From Dev

Spring boot Hibernate error java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;

From Dev

Spring : java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

From Dev

Transactions and JPA / Persistence.xml

From Dev

Spring Boot Test: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined

From Dev

TomCat EE - Hibernate4 & Spring4: Session Factory ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery

From Dev

Spring Boot Rest App on GAE throws an exception cannot be cast to javax.persistence.EntityManagerFactory"

From Dev

Spring JPA : Insert succesfully but Update Failed (javax.persistence.PersistenceException: error during managed flush)

From Dev

Spring Boot Error No qualifying bean of type 'javax.persistence.EntityManagerFactory' available

From Dev

javax.persistence.RollbackException: Error while committing the transaction (JPA without Spring)

From Dev

TomCat EE - Hibernate4 & Spring4: Session Factory ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery

From Dev

Persisting inside the Spring service results into TransactionRequiredException

Related Related

  1. 1

    javax.persistence.TransactionRequiredException:

  2. 2

    Spring Boot: javax.persistence.TransactionRequiredException: Executing an update/delete query

  3. 3

    javax.persistence.TransactionRequiredException: No transactional EntityManager available

  4. 4

    Possible causes of javax.persistence.TransactionRequiredException

  5. 5

    My entities are not persisting showing javax.persistence.TransactionRequiredException

  6. 6

    getting javax.persistence.TransactionRequiredException in a container managed Entity Manager

  7. 7

    Not active transaciotn: javax.persistence.TransactionRequiredException: Executing an update/delete query

  8. 8

    javax.persistence.TransactionRequiredException Error: jpa 2 + hibernate - Native Query

  9. 9

    Hibernate, EJB, javax.persistence.TransactionRequiredException: no transaction is in progress

  10. 10

    My entities are not persisting showing javax.persistence.TransactionRequiredException

  11. 11

    javax.persistence.TransactionRequiredException: no transaction is in progress, @Transactional(propagation=Propagation.REQUIRED) not working

  12. 12

    Synchronizing Hibernate persistence + Spring AMQP publish transactions

  13. 13

    Spring STS javax/persistence/EntityManagerFactory can not found

  14. 14

    Spring TransactionRequiredException exception

  15. 15

    Spring JPA (Hibernate) No qualifying bean of type: javax.persistence.EntityManagerFactory

  16. 16

    Spring boot Hibernate error java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;

  17. 17

    Error: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey with Spring controller

  18. 18

    Why has javax.persistence-api been replaced by jakarta.persistence-api in spring data jpa starter?

  19. 19

    Spring boot Hibernate error java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;

  20. 20

    Spring : java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;

  21. 21

    Transactions and JPA / Persistence.xml

  22. 22

    Spring Boot Test: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined

  23. 23

    TomCat EE - Hibernate4 & Spring4: Session Factory ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery

  24. 24

    Spring Boot Rest App on GAE throws an exception cannot be cast to javax.persistence.EntityManagerFactory"

  25. 25

    Spring JPA : Insert succesfully but Update Failed (javax.persistence.PersistenceException: error during managed flush)

  26. 26

    Spring Boot Error No qualifying bean of type 'javax.persistence.EntityManagerFactory' available

  27. 27

    javax.persistence.RollbackException: Error while committing the transaction (JPA without Spring)

  28. 28

    TomCat EE - Hibernate4 & Spring4: Session Factory ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery

  29. 29

    Persisting inside the Spring service results into TransactionRequiredException

HotTag

Archive