`

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  

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics