Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring JavaFX@Transactional entitymanager已关闭_Spring_Exception_Javafx_Transactions_Transactional - Fatal编程技术网

Spring JavaFX@Transactional entitymanager已关闭

Spring JavaFX@Transactional entitymanager已关闭,spring,exception,javafx,transactions,transactional,Spring,Exception,Javafx,Transactions,Transactional,我在JavaFX应用程序中使用Spring@Transactional时遇到了事务性问题,我所有的bean和图形组件都由Spring管理 我在控制器上使用@PostConstruct初始化应用程序。 在PostConstruct中,我所有的DAO都工作得很好,但是当我通过按下JavaFX按钮调用服务来保存某些内容时,我遇到了这个异常 Caused by: org.springframework.transaction.CannotCreateTransactionException: C

我在JavaFX应用程序中使用Spring@Transactional时遇到了事务性问题,我所有的bean和图形组件都由Spring管理

我在控制器上使用@PostConstruct初始化应用程序。 在PostConstruct中,我所有的DAO都工作得很好,但是当我通过按下JavaFX按钮调用服务来保存某些内容时,我遇到了这个异常

    Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: EntityManagerFactory is closed
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:463)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy48.saveGame(Unknown Source)
at dev.debizis.mtggui.desktop.controller.TemplateEditorController.handleSaveGameAction(TemplateEditorController.java:362)
... 68 more
    Caused by: java.lang.IllegalStateException: EntityManagerFactory is closed
at org.hibernate.jpa.internal.EntityManagerFactoryImpl.validateNotClosed(EntityManagerFactoryImpl.java:388)
at org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager(EntityManagerFactoryImpl.java:342)
at org.hibernate.jpa.internal.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:313)
at org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:449)
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:369)
... 76 more
有人知道为什么entityManager不能在方法上使用@Transactional打开事务吗

我的hibernate bean配置:

http://www.springframework.org/schema/beans/spring-beans.xsd “>

我的Dao方法:

    /** {@inheritDoc}*/
@SuppressWarnings("unchecked")
@Override
public final P saveOrUpdate(final T o) {
    if (entityManager.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(o) == null) {
        entityManager.persist(o);
    } else {
        entityManager.merge(o);
    }
    return (P) entityManager.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(o);
}

提前谢谢。

通过阅读日志,我了解了发生了什么

一个线程正在关闭applicationContext,并隐式关闭包括entityManagerFactory在内的所有单例bean

entityManagerFactory在每个PersistenceUnit生命周期中只能打开一次


当事务试图打开一个工厂已关闭的entityManager时,它会抛出一个异常。

没有配置扫描@Transactional。对不起,我忘记了我的服务上下文,我编辑了我的问题。因此,TemplateEditorController.handleSaveGameAction方法正在调用saveGame方法?什么类/pa是否在中保存游戏?是的,控制器正在类com.cardassiel.core.service.SimpleGameService中调用服务方法实现com.cardassiel.core.service.GameService
    Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: EntityManagerFactory is closed
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:463)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy48.saveGame(Unknown Source)
at dev.debizis.mtggui.desktop.controller.TemplateEditorController.handleSaveGameAction(TemplateEditorController.java:362)
... 68 more
    Caused by: java.lang.IllegalStateException: EntityManagerFactory is closed
at org.hibernate.jpa.internal.EntityManagerFactoryImpl.validateNotClosed(EntityManagerFactoryImpl.java:388)
at org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager(EntityManagerFactoryImpl.java:342)
at org.hibernate.jpa.internal.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:313)
at org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:449)
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:369)
... 76 more
    /** {@inheritDoc} */
@Override
@Transactional
public final Long saveGame(final GameDTO game) {
    LOGGER.debug("saveGame : name = {}", game.getName());
    return gameDao.saveOrUpdate(mapper.map(game, Game.class));
}
    /** {@inheritDoc}*/
@SuppressWarnings("unchecked")
@Override
public final P saveOrUpdate(final T o) {
    if (entityManager.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(o) == null) {
        entityManager.persist(o);
    } else {
        entityManager.merge(o);
    }
    return (P) entityManager.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(o);
}