真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

hibernate使用save持久化了實體后再改變實體的值

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 iterator=(Iterator) 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ù),我們始終認(rèn)為:好的營銷型網(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ù)庫的實體為修改過的實體。

hibernate使用save持久化了實體后再改變實體的值

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 iterator=(Iterator) 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ù)庫的記錄依然被修改了

hibernate使用save持久化了實體后再改變實體的值

對于先查詢再修改,

不寫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)

hibernate使用save持久化了實體后再改變實體的值

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)該是自動選擇才對?


文章標(biāo)題:hibernate使用save持久化了實體后再改變實體的值
網(wǎng)頁路徑:http://weahome.cn/article/pscpop.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部