hibern中的怎么更新某个字段

在hibernate中, Session.update()方法的修改会把所有的字段更新一遍,但是我们在开发中会常用到只修改部分数据。

 

public void add(){
    Session session=HibernateuUtils.getSessionFactory.getCurrentSession();
    session.beginTransaction();
    User user=(User)session.get(User.class,1);
    user.setName("张三");
    session.update();
    session.beginTransaction().commit();
}

现这种会所有的数据全部更新一遍;

在控制台打印出的sql语句如下:

Hibernate:   
    update  
       User  
    set  
        age=?,  
        birthday=?,  
        name=?,  
        title=?   
   where  
        id=?  

 在上面的例子中可以看出,我们只需要修改name属性,但是从打印的sql语句得出,update()方法是把所有的属性够修改了一遍。这样如果我们的数据中有文本类型的大量数据,它的执行效率就会很低。

改善它有三种方法:

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

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

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

 

@Column(updatable=false)  
    public int getName() {  
        return name;  
   }  

 但是这种方式不灵活

 

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

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

3、使用HQL语句

 

public void update(){  
        Session session =  HibernateUitl.getSessionFactory().getCurrentSession();  
        session.beginTransaction();  
        Query query = session.createQuery("update User t set t.name = 'yangtianb' where id = 1");  
        query.executeUpdate();  
        session.getTransaction().commit();  
} 

打印的sql语句是:

Hibernate:   
    update  
        User   
    set  
        name='yangtianb'   
    where  
        id=1  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值