StringBuffer sb = new StringBuffer();
sb.append(" UPDATE TABLE p1 SET p1.NUMBER = (");
sb.append(" SELECT V.NUMBER FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY p.PID ORDER BY ID ASC ) NUMBER , p.ID FROM TABLE p) V");
sb.append(" WHERE V.ID = p1.ID) WHERE EXISTS ( SELECT p.PID, p.ID, ROW_NUMBER() OVER (PARTITION BY p.PID ORDER BY ID ASC ) NUMBER FROM TABLE p");
sb.append(" WHERE p.ID = p1.ID) AND PID = :PID ; COMMIT;");
Query query = this.getEntityManager().createNativeQuery(sb.toString());
query.setParameter("PID", id);
int num = query.executeUpdate();
System.out.println("==================================sql执行完毕 Test=======受影响的行数为:" + num);
有没有取消自动提交模式。
受影响的行数sout出来也是正常的行数
后台打出的log中的sql语句放到数据库工具里面执行 数据能够成功的更新。
看你的sql写了提交的,事务有回滚么