91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-06-28 19:06:23 來源:網絡 閱讀:486 作者:matengbing 欄目:數據庫
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前并沒有寫入數據庫中,此時再改變

實體,保存到數據庫的實體為修改過的實體。

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<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提交后,數據庫的記錄依然被修改了

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

對于先查詢再修改,

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

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=?

發出的sql竟然是update,怎么不是save,應該是自動選擇才對?

向AI問一下細節
推薦閱讀:
  1. DataTable 轉實體
  2. h5實體

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东台市| 平阴县| 定安县| 潢川县| 张北县| 泉州市| 星子县| 开封县| 静安区| 平谷区| 佛坪县| 钟山县| 菏泽市| 晋城| 南宁市| 武平县| 甘南县| 仁寿县| 饶阳县| 湘潭市| 洛扎县| 仙游县| 澄迈县| 五家渠市| 普兰店市| 无棣县| 自治县| 民丰县| 龙海市| 托克托县| 金寨县| 万源市| 西峡县| 内乡县| 莱州市| 石台县| 五大连池市| 吉首市| 沭阳县| 陇川县| 湖州市|