public static void addStudent(){ sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory(); Session session=sessionFactory.getCurrentSession(); session.beginTransaction(); Student student=new Student( "李四", 34); session.save(student); student.setName("王五"); Iterator<Student> iterator=(Iterator<Student>) session.createQuery("from Student").iterate(); while(iterator.hasNext()){ System.out.println(iterator.next().toString()); } session.getTransaction().commit(); }
注意
創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗,為客戶提供超值的營銷型網(wǎng)站建設(shè)服務(wù),我們始終認為:好的營銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個人等客戶提供了做網(wǎng)站、網(wǎng)站設(shè)計服務(wù),以良好的商業(yè)信譽,完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。
session.save(student); student.setName("王五");
session持久化了實體后,只是寫入了session緩存中,commit前并沒有寫入數(shù)據(jù)庫中,此時再改變
實體,保存到數(shù)據(jù)庫的實體為修改過的實體。
public static void updateStudent(){ sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory(); Session session=sessionFactory.getCurrentSession(); session.beginTransaction(); Student student=(Student) session.get(Student.class, 2); student.setName("update"); Iterator<Student> iterator=(Iterator<Student>) session.createQuery("from Student").iterate(); while(iterator.hasNext()){ System.out.println(iterator.next().toString()); } session.getTransaction().commit(); }
從數(shù)據(jù)庫中查找id為2的記錄后,此時session緩存中有了實體,直接修改實體的值,不用update,session提交后,數(shù)據(jù)庫的記錄依然被修改了
對于先查詢再修改,
不寫update,merge和
session.update(student);
session.merge(student);
都是一樣的,commit后數(shù)據(jù)都會寫入數(shù)據(jù)庫
Student student=new Student(10,"update", 100); session.update(student);
直接new一個實體(其id=10的記錄在數(shù)據(jù)庫中不存在),直接update報錯
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
此Student對象的id設(shè)置了自增,其id=10的記錄在數(shù)據(jù)庫中不存在,
Student student=new Student(10,"update", 100); session.merge(student);
結(jié)果數(shù)據(jù)庫保存了記錄,但是id不為10,而是按照自增的結(jié)果,為6(插入前最大為5)
Student student=new Student(11,"update", 100); session.saveOrUpdate(student);
而想象中可以完成此操作的saveOrUpdate()卻也報錯
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
Hibernate: update Student set age=?, name=? where id=?
發(fā)出的sql竟然是update,怎么不是save,應(yīng)該是自動選擇才對?
文章題目:hibernate使用save持久化了實體后再改變實體的值
當(dāng)前地址:http://bm7419.com/article8/pscpop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、品牌網(wǎng)站設(shè)計、微信公眾號、虛擬主機、軟件開發(fā)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)