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里的是類里的對象或者屬性,而不是數據表或者字段。