当前位置: 首页 > 面试题库 >

HibernateException:无法获取当前线程的事务同步会话

姬庆
2023-03-14
问题内容

我收到错误消息:

Exception in thread "main" org.hibernate.HibernateException: 
Could not obtain transaction-synchronized Session for current thread

主要

ppService.deleteProductPart(cPartId, productId);

@Service(“ productPartService”)

@Override
public void deleteProductPart(int cPartId, int productId) {
    productPartDao.deleteProductPart(cPartId, productId);
}

@Repository(“ productPartDAO”)

@Override
    public void deleteProductPart(ProductPart productPart) {
        sessionFactory.getCurrentSession().delete(productPart);
    }


@Override
    public void deleteProductPart(int cPartId, int productId) {
        ProductPart productPart  = (ProductPart) sessionFactory.getCurrentSession()
                .createCriteria("ProductPart")
                .add(Restrictions.eq("part", cPartId))
                .add(Restrictions.eq("product", productId)).uniqueResult();
        deleteProductPart(productPart);
    }

如何解决?

更新:

如果我修改这样的方法:

@Override
@Transactional
public void deleteProductPart(int cPartId, int productId) {          
    System.out.println(sessionFactory.getCurrentSession());
}

它返回:

SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[] collectionQueuedOps=[] unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])

但是,如果我删除@Transactional它最终会出现异常:

org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread

我可以通过添加来使它工作@Transactional,但现在org.hibernate.MappingException: Unknown entity: ProductPart虽然链接.uniqueResult()到了,但我还是可以Criteria。如何解决?


问题答案:

错误org.hibernate.MappingException: Unknown entity: ProductPart表明没有名称为的实体ProductPart。解决此问题的一种方法是将Class对象传递给createCriteria方法为:

createCriteria(ProductPart.class)

在API中,使用String和Class的区别如下:

Session.createCriteria(字符串)

Create a new Criteria instance, for the given entity name.

Session.createCriteria(Class)

使用给定的别名,为给定的实体类或实体类的超类创建一个新的Criteria实例。

如果您传递一个String,那么休眠将查找其名称声明为的实体ProductPart



 类似资料:
  • 我对spring、hibernate和数据库都是新手。我收到“HibernateException:无法获取当前线程的事务同步会话”错误。请帮帮我.找到下面的代码。 这是控制器 这是EntityDaoImplementation 这是我的模特课 这是服务实现 这是ProductTable.jsp 这是web.xml null 这是Dispatcher servlet 这是ApplicationCo

  • 尝试使用带批注的类时出现以下异常: 我初始化应用程序的方式很复杂,因此我需要提供一个指向完整基本代码的链接以获得更多信息:https://github.com/dtrunk90/webapp-base。我把它用作maven的覆盖层。 下面是必要的代码: 初始值设定项(来自webapp-base): 初始值设定项(来自我的webapp): (来自webapp-base): (来自我的webapp):

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

  • 我将一个Spring4/Hibernate4项目从xml-config转换为Java-config时遇到以下异常。 项目在Eclipse中启动upproperty和errorfree,但在第一个请求时出现异常。在我的类中,我为、、、配置了。 我的所有服务都用注释。 知道这是从哪来的吗? 编辑%1 根据要求,这里的StackTrace: 编辑2 奇怪的是,我从另一个工作完美无缺的项目中借用了整个Ja

  • 问题内容: 我使用spring + hibernate创建了一个应用程序,但始终会收到此错误。这是我第一个使用hibernate的应用程序,我阅读了一些指南,但无法解决此问题。我在哪里做错了? 这是我的应用程序的代码 student.java studentDAO.java StudentDAOImpl.java MainApp.java springConfig.xml sql 问题答案: 你必

  • 同样的问题已经被问了很多次了,但是请在重复之前仔细阅读我的问题。 我不想使用基于注释的事务管理,所以我的问题与这里提出的问题不同。 我的XML声明 遵循作为bean的DAO声明 我的TX建议 AOP配置 我的刀 我的模型 我的Hibernate映射文件 当我通过以下代码以编程方式运行此应用程序时, 它会抛出以下异常 org.hibernate.hibernateException:无法在org.s