Java 休眠:如果没有活动事务,删除无效

Java 休眠:如果没有活动事务,删除无效,java,hibernate,Java,Hibernate,我正在尝试使用hibernate从数据库中删除对象 当我点击“删除”按钮时,hibernate出现错误 org.hibernate.HibernateException: delete is not valid without active transaction 这里是我删除时的代码 int id = eStoreUserDTO.geteStoreStoresDTO().getId(); StringBuilder hql = new StringBuilder

我正在尝试使用hibernate从数据库中删除对象 当我点击“删除”按钮时,hibernate出现错误

org.hibernate.HibernateException: delete is not valid without active transaction
这里是我删除时的代码

       int id = eStoreUserDTO.geteStoreStoresDTO().getId();
        StringBuilder hql = new StringBuilder();

        hql.append("select distinct eStoreStoresDTO from EStoreStoresDTO"
                + " eStoreStoresDTO where eStoreStoresDTO.id = "+ id);
        List<EStoreStoresDTO> store = DaoFactory.getDao().selectAllHql(hql + "");

        eStoreUserDTOs.remove(eStoreUserDTO);
        DaoFactory.getDao().delete(eStoreUserDTO);

        EStoreStoresDTO dto = store.get(0);
        DaoFactory.getDao().delete(dto);

当您在数据库上执行CRUD操作时,一定要检查您使用的会话是否打开。如果它处于打开状态,则您还应检查事务是否处于活动状态。如果事务处于活动状态,则您可以继续操作。但如果事务未激活,则必须手动获取事务。如果会话未打开,您应该获得一个新会话

用于检查会话是否打开

if(session.isOpen()){
}
用于获取新会话

Session session = HibernateUtil.getSessionFactory.getCurrentSession();
or Session session = HibernateUtil.getSessionFactory.openSession();
用于检查事务活动性

if(transaction.isActive()){}
用于获取新事务

transaction.begin();

当事务处于活动状态时,您不应开始该事务,否则将导致错误,即您正在获取

异常很简单,并显示:

如果没有活动事务,删除无效

transaction.begin();
因此,这里的问题是您的会话没有任何打开/活动的
事务
,这是由于行:

transaction = session.getTransaction();
您从
会话
获取
事务
,而不检查其是否处于活动状态

为了避免此问题,您只需开始一个新的事务,以确保您在这种情况下不会摔倒,因此请将代码更改为:

transaction = session.beginTransaction();

1) 请复制您的代码,不要放置图像。2) 能否添加DaoFactory.getDao()的代码?Thanks@Leviand`@Override public void delete(Object Object)抛出异常{Session Session=null;Transaction Transaction=null;try{Session=getCurrentSession();Transaction=Session.getTransaction();Session.delete(Object);Transaction.commit();}catch(异常e){if(Transaction!=null){transaction.rollback();}throw new dao exception(e);}}`@Leviand:很抱歉,我拒绝了您的编辑(至少是这样投票的)。现在只看到您从评论中获取代码,在编辑的评论中遗漏了代码。很遗憾,无法“撤消”我的投票。对不起