1、用來(lái)更新detached對(duì)象,更新完成后轉(zhuǎn)為persistent狀態(tài)
2、更新無(wú)ID或者記錄不存在的transient對(duì)象會(huì)報(bào)錯(cuò)
3、更新已設(shè)定ID的transient對(duì)象可以(數(shù)據(jù)庫(kù)必須有相對(duì)應(yīng)記錄)
4、persistent狀態(tài)的對(duì)象只要設(shè)定不同字段就會(huì)發(fā)生更新
5、更新部分更改的字段
A、XML設(shè)定property標(biāo)簽的update屬性,annotation設(shè)定@Column的updateable屬性,不過(guò)這種方式很少使用,因?yàn)槠洳混`活
B、使用XML中的dynamic-update屬性,JPA1.0 Annotation沒(méi)有對(duì)應(yīng)的屬性
同一個(gè)session可以,跨session不行,不過(guò)可以用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里的是類里的對(duì)象或者屬性,而不是數(shù)據(jù)表或者字段。