• Hibernate更新某些字段的几种update方法


    Hibernate 中如果直接使用

    Session.update(Object o);

    会把这个表中的所有字段更新一遍。

    比如:

    1. public class TeacherTest {  
    2.     @Test  
    3.     public void update(){  
    4.         Session session =  HibernateUitl.getSessionFactory().getCurrentSession();  
    5.         session.beginTransaction();  
    6.         Teacher t = (Teacher) session.get(Teacher.class, 3);  
    7.         t.setName("yangtb2");  
    8.         session.update(t);  
    9.           
    10.         session.getTransaction().commit();  
    11.     }  
    12. }  


    Hibernate 执行的SQL语句:Hibernate 执行的SQL语句:

    1. Hibernate:   
    2.     update  
    3.         Teacher   
    4.     set  
    5.         age=?,  
    6.         birthday=?,  
    7.         name=?,  
    8.         title=?   
    9.     where  
    10.         id=?  

    我们只更改了Name属性,而Hibernate 的sql语句 把所有字段都更改了一次。

    这样要是我们有字段是文本类型,这个类型存储的内容是几千,几万字,这样效率会很低。

    那么怎么只更改我们更新的字段呢?

    有三中方法:

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

    我们只更改了Name属性,而Hibernate 的sql语句 把所有字段都更改了一次。

    这样要是我们有字段是文本类型,这个类型存储的内容是几千,几万字,这样效率会很低。

    那么怎么只更改我们更新的字段呢?

    有三中方法:

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

    1. <property name="age" update="false"></property>  


     

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

    1. @Column(updatable=false)  
    2.     public int getAge() {  
    3.         return age;  
    4.     }  


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

    1. Hibernate:   
    2.     update  
    3.         Teacher   
    4.     set  
    5.         birthday=?,  
    6.         name=?,  
    7.         title=?   
    8.     where  
    9.         id=?  


     

    缺点:不灵活····

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

    1. <class name="com.sccin.entity.Student"  table="student" dynamic-update="true">  


     

    OK,这样就不需要在字段上设置了。

    但这样的方法在Annotation中没有

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

    使用HQL语句修改数据

    1. public void update(){  
    2.         Session session =  HibernateUitl.getSessionFactory().getCurrentSession();  
    3.         session.beginTransaction();  
    4.         Query query = session.createQuery("update Teacher t set t.name = 'yangtianb' where id = 3");  
    5.         query.executeUpdate();  
    6.         session.getTransaction().commit();  
    7.     }  


    Hibernate 执行的SQL语句:

      1. Hibernate:   
      2.     update  
      3.         Teacher   
      4.     set  
      5.         name='yangtianb'   
      6.     where  
      7.         id=
  • 相关阅读:
    过河卒(Noip2002)
    暑假学习日记2013/7/18
    暑假学习日记2013/7/16
    iOS中利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G) by徐文棋
    隐藏键盘的N种方法
    cell重用
    关于viewControllers之间的传值方式
    iOS开发之工欲善其事,必先利其器
    NSLog输出格式及随机数
    iOS团队代码规范
  • 原文地址:https://www.cnblogs.com/zheh/p/3978793.html
Copyright © 2020-2023  润新知