zoukankan      html  css  js  c++  java
  • hibernate update 只更新部分字段的3种方法(转载)

    hibernate 中如果直接使用
    Session.update(Object o);
    会把这个表中的所有字段更新一遍。

    比如:

    public class Teacher Test {
        @Test
        public void update(){ 
            Session session = HibernateUitl.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            Teacher t = (Teacher) session.get(Teacher.class,3);
            t.setName("yangtb2");
            session.update(t);
            session.getTransaction().commit();
        }
    }

    Hibernate 执行的SQL语句:
    代码

    Hibernate:
    UPDATE
    Teacher 
    SET
    age=?,
    birthday=?,
    name=?,
    title=? 
    WHERE
    id=?

    我们只更改了Name属性,而Hibernate 的sql语句 把所有字段都更改了一次。
    这样要是我们有字段是文本类型,这个类型存储的内容是几千,几万字,这样效率会很低。
    那么怎么只更改我们更新的字段呢?
    有三种方法:

    1.XML中设置property 标签 update = “false” ,如下:我们设置 age 这个属性在更改中不做更改



    在Annotation中 在属性GET方法上加上@Column(updatable=false)

    @Column(updatable=false)
    public int getAge() {
    return age;
    }

    我们在执行 Update方法会发现,age 属性 不会被更改

    Hibernate:
    UPDATE
    Teacher
    SET
    birthday=?,
    name=?,
    title=?
    WHERE
    id=?

    缺点:不灵活····

    2.第2种方法··使用XML中的 dynamic-update="true"

    <classname="com.sccin.entity.Student"table="student"dynamic-update="true"/>

    OK,这样就不需要在字段上设置了。
    但这样的方法在Annotation中没有

    3.第三种方式:使用HQL语句(灵活,方便)

    使用HQL语句修改数据
    public void update(){
    Session session = HibernateUitl.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Query query = session.createQuery("update Teacher t set t.name = 'yangtianb' where id = 3");
    query.executeUpdate();
    session.getTransaction().commit();
    }

    Hibernate 执行的SQL语句:
    Hibernate:
    update
    Teacher
    set
    name='yangtianb'
    where
    id=3

    这样就只更新了我们更新的字段·····

  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/quickcodes/p/hibernate-update-zhi-geng-xin-bu-fen-zi-duan-de3zh.html
Copyright © 2011-2022 走看看