1、用来更新detached对象,更新完成后转为persistent状态
2、更新无ID或者记录不存在的transient对象会报错
3、更新已设定ID的transient对象可以(数据库必须有相对应记录)
4、persistent状态的对象只要设定不同字段就会发生更新
5、更新部分更改的字段
A、XML设定property标签的update属性,annotation设定@Column的updateable属性,不过这种方式很少使用,因为其不灵活
B、使用XML中的dynamic-update属性,JPA1.0 Annotation没有对应的属性
同一个session可以,跨session不行,不过可以用merge()
C、使用HQL(EJBQL)(推荐使用此方法)
如下例:
StudentPK pk = new StudentPK();
pk.setId(1);
pk.setName("s1");
Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
Query q = session2.createQuery("update Student s set s.age=40 where s.pk=pk");
q.executeUpdate();
session2.getTransaction().commit();
注意SQL里的是类里的对象或者属性,而不是数据表或者字段。