hibernate多个更新查询单个事务

时间:2014-01-24 07:27:20

标签: mysql hibernate

我正在使用hqlnate和mysql数据库,但在单个事务中遇到多个更新的问题

这是我的代码

public void  updateOEMUser(OEMUserDetailsDTO userDTO) throws Exception{
        Session session = GCCPersistenceMangerFactory.getSessionFactory().openSession();
    Transaction tx = null;
    try{
        String query = "update oemuserdata set full_name=\""+userDTO.getFullName()+ "\" ,contact_no=\""+userDTO.getContactNo() + "\" where user_id="+userDTO.getUserId();
        String query1 = "update usermasterdata set account_status="+userDTO.getAccountStatus() + " ,user_name=\"" + userDTO.getUserName() + "\" where user_id="+userDTO.getUserId();
        Query q = session.createSQLQuery(query);
        Query q1 = session.createSQLQuery(query1);
        tx = session.beginTransaction();
        q.executeUpdate();
        q1.executeUpdate();
        tx.commit();
    }catch (HibernateException e) {
        if (tx!=null) tx.rollback();
        e.printStackTrace();
        throw new RuntimeException("HibernateException_updateOEMUser");
    }finally {
        session.close(); 
    }
}

代码有效,但是当我制作" q1.executeUpdate()"在" oemuserdata"中记录失败在Mysql中被锁定。

我做错了吗?

2 个答案:

答案 0 :(得分:1)

尝试使用这种模式。

StringBuilder query = new StringBuilder();
query.append("UPDATE  CLASSNAME_FIRST a ,");
query.append("CLASSNAME_SECOND b,");
query.append("SET a.full_name='"+userDTO.getFullName()",");
.....

int var = stmt.executeUpdate(query);  

答案 1 :(得分:0)

好的我没找到解决办法,但我发现这里发生了什么。

成功执行 q.executeUpdate()后删除连接执行 q1.executeUpdate()时会抛出异常,并且在catch块之后它会进入最后一个块并尝试执行 session.close(),但由于没有数据库连接,这也会失败。

但是Mysql仍然有 q.executeUpdate()请求的锁定。这就是为什么行被锁定,直到Mysql释放锁定为止。