EntityManager无法使用persist将元素保存到数据库

我遇到了使用EntityManager将元素持久化到数据库的问题。 根据我发现的答案,我在DaoJpa中尝试了这4种方法来做这样的事情,但仍然失败了。 在这里,我附上了我尝试的四种方式:

控制器部分代码:

@Transactional SmartProduct smartProduct = new SmartProduct(); smartProduct.setName("Dove Soap"); smartProductDao.persist(smartProduct); 

道道:

  @Transactional public void persist(SmartProduct smartProduct) { entityManager.persist(smartProduct); 

不行!

2。

 @Transactional public void persist(SmartProduct smartProduct) { entityManager.persist(smartProduct); entityManager.flush(); 

我得到的例外:没有交易正在进行中

3。

 @Transactional public void persist(SmartProduct smartProduct) { EntityTransaction emTransaction = entityManager.getTransaction(); emTransaction.begin(); entityManager.persist(smartProduct); emTransaction.commit(); entityManager.close(); 

我得到的例外:不允许在共享的EntityManager上创建事务 – 使用Spring事务或EJB CMT

4。

 @Transactional public void persist(SmartProduct smartProduct) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistenceUnit"); EntityManager em = emf.createEntityManager(); EntityTransaction etx = em.getTransaction(); etx.begin(); em.persist(smartProduct); etx.commit(); em.close(); emf.close(); 

我得到的例外:应用程序必须提供JDBC连接

有人可以帮我解决问题吗? 提前谢谢了!

非常感谢JustinKSU的帮助。 我在Spring上下文中添加了注释,然后它就解决了! 这是我的Spring上下文的上一个版本:

         

加完之后

  

有用:

          

要在Spring上下文中启用@Transactional,您应该具有以下内容:

适合您的Spring版本:

  

启用注释:

  

声明您的事务管理器注入您的实体管理器:

    

如果您仍然遇到此问题且所有配置都正常,请确保@Transaction带注释的方法是公共的,不受保护,以便由事务管理器识别/管理。