11、DML风格的操作(尽量少用,因为和缓存不同步)
参见:DMLQueryTest.java
session.createQuery("update Student s set s.name=? where s.id < ?")
.setParameter(0, "李四")
.setParameter(1, 5)
.executeUpdate();
应 当尽量少用,因为和缓存不同步,也就是说,假如在执行上面的语句之前,已经把student封装成一个list曾经拿了出来,再执行上面的语句对 student中的表进行数据更新,然后再list Student表,则此时的list是从缓存中取的数据,而不是从表中找到的数据,也就是 说,list拿到的是update前的数据,所以造成了这种不同步,所以这种风格尽量少用。
从这个方面也可以看得出hibernate并不适用于聚集性,统计,大量批量的更新,删除等操作
参见:DMLQueryTest.java
session.createQuery("update Student s set s.name=? where s.id < ?")
.setParameter(0, "李四")
.setParameter(1, 5)
.executeUpdate();
应 当尽量少用,因为和缓存不同步,也就是说,假如在执行上面的语句之前,已经把student封装成一个list曾经拿了出来,再执行上面的语句对 student中的表进行数据更新,然后再list Student表,则此时的list是从缓存中取的数据,而不是从表中找到的数据,也就是 说,list拿到的是update前的数据,所以造成了这种不同步,所以这种风格尽量少用。
从这个方面也可以看得出hibernate并不适用于聚集性,统计,大量批量的更新,删除等操作