`
QmoreCzs
  • 浏览: 8934 次
社区版块
存档分类
最新评论

学习笔记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中生效(更新persisent状态对象才行)
<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(建议)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics