Java 休眠:如果没有活动事务,删除无效
我正在尝试使用hibernate从数据库中删除对象 当我点击“删除”按钮时,hibernate出现错误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
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:很抱歉,我拒绝了您的编辑(至少是这样投票的)。现在只看到您从评论中获取代码,在编辑的评论中遗漏了代码。很遗憾,无法“撤消”我的投票。对不起