我正在使用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中被锁定。
我做错了吗?
答案 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释放锁定为止。