简体   繁体   中英

hibernate multiple update queries single transaction

I am using hibernate with mysql db but having trouble with multiple updates in single transaction

Here is my code

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(); 
    }
}

The code works but when I make "q1.executeUpdate()" fail the record in "oemuserdata" is getting locked in Mysql.

Am I doing something wrong?

Try using such kind of pattern.

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);  

Ok I didin't find the solution but I found out what's happening here.

When I remove the connection after successful execution of q.executeUpdate() exception is thrown at the execution of q1.executeUpdate() and after catch block it goes in final block and tries to execute session.close() , but since there is no DB connectivity this also fails.

But Mysql still has the lock requested by q.executeUpdate() . That's why the row is locked until Mysql releases lock itself.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM