gpt4 book ai didi

java - init 方法中的 getResultList() 给出错误 "session is closed"

转载 作者:行者123 更新时间:2023-11-30 04:58:17 27 4
gpt4 key购买 nike

我试图在服务类的 init 方法中从数据库加载一些数据,但是当我调用“getResultList()”方法时,它会抛出异常“ session 已关闭”。

我的applicationContext.xml

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />    
<bean id="testService" class="com.impl.TestServiceImpl" init-method="init" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />

我的服务类别:

public Class TestServiceImpl implements TestService {
private EntityManager entityManager;

@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}

public void init() {
Query query = entityManager.createQuery("from myTable");
query.getResultList(); // this causes error...
}
}

这是错误消息:

SEVERE: Exception sending context initialized event to listener instance of class 
org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'testService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]:
Invocation of init method failed; nested exception is
javax.persistence.PersistenceException: org.hibernate.SessionException: Session is
closed!
Caused by: javax.persistence.PersistenceException: org.hibernate.SessionException:
Session is closed!
at
org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)

那么我在这里做错了什么?我该如何解决这个问题?谢谢。

最佳答案

首先,您的 TestServiceImpl 没有使用 @Transactional 进行注释,但即使是,它也不会工作,请参阅:Transactional init-methodSPR-2740 - 这说明这是设计使然。

您可以做的是仅使用init()方法来调用其他bean的业务方法,该方法被标记为@Transactional

private TestDao testDao;

public void init() {
testDao.findAll();
}

TestDao bean中:

private EntityManager entityManager;

@Transactional
public findAll() {
Query query = entityManager.createQuery("from myTable");
return query.getResultList();
}

关于java - init 方法中的 getResultList() 给出错误 "session is closed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7787155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com