最基础用法:
同一个session范围内,当用get方法取得一个对象信息后,对该对象内容进行改变时,也会发生update效果,这是因为get方法取得对象为persisent状态,hibernate会自动进行session缓存(persisent状态才有)与数据库是否同步,否则更新。
以上更新数据库时,所有字段都进行更新,当某个字段存放内容很大,如一篇文章时候,还进行字段全部更行就会浪费很多资源了,因此我们可以用以下方法进行部分字段更改:
a)XML设定property标签的update属性,annotation设定@Column的updatable=false属性,这种方法一旦设定,该字段就在更新时候忽略掉,无法更新,不灵活。
b)使用XML中的dynamic-update,只能在同一个session中生效([color=red]更新persisent状态对象才行[/color])
c)使用HQL(建议)
@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(建议)