Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT

后端 未结 3 1592
闹比i
闹比i 2020-12-29 01:55

This post is in continuation of JPA How to get the value from database after persist

When I execute the following I am getting following exception, how can I resolve

相关标签:
3条回答
  • 2020-12-29 02:20

    Injecting EntityManagerFactory instead of EntityManager and javax.transaction.Transactional annotation on method solved my issue as shown below.

    //Autowire EntityManagerFactory
    @PersistenceUnit(unitName = "readwrite.config")
    private EntityManagerFactory entityManagerFactory;
    
    
    //Use below code on create/update
    EntityManager entityManager = entityManagerFactory.createEntityManager();
    
    entityManager.getTransaction().begin();
    if (!ObjectUtils.isEmpty(entity) && !entityManager.contains(entity)) {
       entityManager.persist(entity);
       entityManager.flush();
    }
    entityManager.getTransaction().commit();
    
    0 讨论(0)
  • 2020-12-29 02:23

    I guess the problem here is that although you have defined the bean for the transaction manager, you haven't annotated the create() method with @Transactional which enables spring transactions.

    Also remove the entityManager.getTransaction().commit(); statement as now all the transaction management will be handled by spring, if you leave the statement as it is then you will get the same error again.

    0 讨论(0)
  • 2020-12-29 02:24

    you need to remove entityManager.getTransaction().begin() statement and annotate method using @Transactional which enables spring transactions

    0 讨论(0)
提交回复
热议问题