当前位置: 首页 > 知识库问答 >
问题:

将服务类标记为事务性时,在DAO中出现“当前线程找不到会话”错误

郎嘉树
2023-03-14
<tx:annotation-driven transaction-manager="transactionManager"/>
public class BlahServiceImpl implements BlahService {

    @Transactional  
    public Blah GetMostRecentBlah() {
        BlahDAO blahDAO = DAOFactory.GetBlahDAO();
        return blahDAO.GetMostRecentBlah();
    }
}
private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

public Blah GetMostRecentBlah() {
    return (Blah)sessionFactory.getCurrentSession().createQuery("from Blah where blahID = (select max(blahID) from Blah)").uniqueResult();
}

错误:

org.hibernate.HibernateException: No Session found for current thread
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1039)
com.blah.blah.DAO.BlahDAOImpl.GetMostRecentBlah(BlahDAOImpl.java:18)

正如我所说的,如果我用@Transactioanl(以及服务方法)注释DAO函数,这会起作用,但我不明白为什么。

共有1个答案

郭曾笑
2023-03-14

有两个可能的原因。

1)您的服务bean位于单独的ApplicationContext中,它没有启用注释驱动的事务。

2)您将获得对服务实例的引用,该实例是原始实例,而不是代理实例,因此是事务性实例。

 类似资料:
  • 如果http请求超时,我试图中断当前线程。我已经为Kafka事务设置了PlatformTransactionManager作为bean。我在方法级别使用@Transactional注释。我们将发布三个主题的信息。在第一个主题中发布消息后,我将添加线程。睡眠(5000),如果执行时间超过6秒,当前线程将从筛选器中断。所以这里的通话被打断了,但信息被发布给了Kafka。我们只是在传达信息。我们不消费任

  • 我用spring+hibernate创建了一个应用程序,但总是得到这个错误。这是我使用hibernate的第一个应用程序,我读了一些指南,但我不能解决这个问题。我哪里做错了? 这是我的应用程序的代码 student.java StudentDAO.java StudentDAOImpl.java MainApp.java SpringConfig.xml SQL

  • 问题内容: 我收到以下错误 服务等级 DAO类 我在我的application-context.xml中有这个 谁能发现我为什么出现以下错误? 问题答案: 您使用@Transactional为Dao类添加了注释,但没有为服务类添加注释。该行: 要求您进行交易。 您可以通过将@Transactional批注添加到ProfileService类,或者只添加registerVisitor()方法来解决此

  • 问题内容: 我在Spring3和Hibernte4中遇到上述异常 以下是我的bean xml文件 我的BaseDAO类看起来像这样 以下代码在标题中引发异常 有谁知道如何解决这个问题? 问题答案: 仅在交易范围内有意义。 您需要声明一个适当的事务管理器,划分事务边界并在其中进行数据访问。例如,如下: 。 也可以看看: 10.交易管理 13.3hibernate

  • 问题内容: 我有一个使用spring和hibernate的java stuts2 Web应用程序。 我越来越。 SpringBean.xml hibernate.cfg.xml CustomerServiceImpl.java CustomerDaoImpl.java CustomerAction.java 我得到的例外 问题答案: 您在Spring配置中指定了一个事务管理器,但是没有关于何时或何

  • 问题内容: 我从xml-转换为Java-Config的Spring4 / Hibernate4项目遇到以下异常。 该项目在Eclipse中启动了属性并且没有错误,但是在第一个请求出现Exception时。在我-class我已经配置为,,,。 我所有的服务都标有。 知道这可能来自哪里吗? 编辑1 根据要求,这里是堆栈跟踪: 编辑2 奇怪的是,我从另一个项目中完美地借用了整个Java-Config代码