您好,登錄后才能下訂單哦!
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(); }
注意
session.save(student); student.setName("王五");
session持久化了實體后,只是寫入了session緩存中,commit前并沒有寫入數據庫中,此時再改變
實體,保存到數據庫的實體為修改過的實體。
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(); }
從數據庫中查找id為2的記錄后,此時session緩存中有了實體,直接修改實體的值,不用update,session提交后,數據庫的記錄依然被修改了
對于先查詢再修改,
不寫update,merge和
session.update(student);
session.merge(student);
都是一樣的,commit后數據都會寫入數據庫
Student student=new Student(10,"update", 100); session.update(student);
直接new一個實體(其id=10的記錄在數據庫中不存在),直接update報錯
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
此Student對象的id設置了自增,其id=10的記錄在數據庫中不存在,
Student student=new Student(10,"update", 100); session.merge(student);
結果數據庫保存了記錄,但是id不為10,而是按照自增的結果,為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=?
發出的sql竟然是update,怎么不是save,應該是自動選擇才對?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。