学习笔记6——hibernate中update方法

最基础用法:

@Test
public void testUpdate1(){
Session session = sessionFactory.getCurrentSession() ;
session.beginTransaction() ;
Teacher t = (Teacher)session.get(Teacher.class, 1) ;
session.getTransaction().commit() ;
t.setName("zhanglaoshi") ;


Session session2 = sessionFactory.getCurrentSession() ;
session2.beginTransaction() ;
session2.update(t) ;
session2.getTransaction().commit() ;

}

同一个session范围内,当用get方法取得一个对象信息后,对该对象内容进行改变时,也会发生update效果,这是因为get方法取得对象为persisent状态,hibernate会自动进行session缓存(persisent状态才有)与数据库是否同步,否则更新。

@Test
public void testUpdate2(){
Session session = sessionFactory.getCurrentSession() ;
session.beginTransaction() ;
Teacher t = (Teacher)session.get(Teacher.class, 1) ;
t.setName("zhanglaoshi22") ;
session.getTransaction().commit() ;

}



以上更新数据库时,所有字段都进行更新,当某个字段存放内容很大,如一篇文章时候,还进行字段全部更行就会浪费很多资源了,因此我们可以用以下方法进行部分字段更改:
a)XML设定property标签的update属性,annotation设定@Column的updatable=false属性,这种方法一旦设定,该字段就在更新时候忽略掉,无法更新,不灵活。
b)使用XML中的dynamic-update,只能在同一个session中生效([color=red]更新persisent状态对象才行[/color])

<hibernate-mapping package="com.bjsxt.hibernate.vo" >
<class name="Student" dynamic-update="true">
<id name="id">
<generator class="native"/>
</id>
<property name="name"></property>
<property name="age"></property>
</class>
</hibernate-mapping>

c)使用HQL(建议)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值