养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

hibernate中Session.update()方法详解

时间:2024-10-02 14:31:35

hibernate中Session.update()方法详解

工具/原料

hibernate

eclipse

方法/步骤

1、Session的update方法:使一个游离对象转化为持久化对象,并且计划执行一条update语句。若希望Session仅当修改了对象的属性时才执行update()语句,可以把映射文件中<class>元素的select-before-update设为true,该属性的默认值为false。

hibernate中Session.update()方法详解

2、若更新一个持久化对象,不需要显示的调用update方法,因为在调用Transaction的commit()方法是,会先执行session的flush方法。@TestpublicvoidtestUpdate(){Newsnews=(News)session.get(News.class,1);news.setAuthor("oracle");session.update(news);}

hibernate中Session.update()方法详解

3、我们接下来测试一段代码,看会不会调用update方法。@TestpublicvoidtestUpdate(){Newsnews=(News)session.get(News.class,1);transaction.commit();session.close();session=sessionFactory.openSession();transaction=session.beginTransaction();news.setAuthor("oracle185");}

hibernate中Session.update()方法详解

4、在上述代码代码中,由于对象已经处于游离状态,若要更新一个游离对象,需要显示的调用s娣定撰钠ession的update菱诎逭幂方法。可以把一个游离对象转化成持久化对象。@TestpublicvoidtestUpdate(){Newsnews=(News)session.get(News.class,1);transaction.commit();session.close();session=sessionFactory.openSession();transaction=session.beginTransaction();news.setAuthor("oracle185");session.update(news);}

hibernate中Session.update()方法详解

5、需要注意的是:无论要更新的游离对象和数据表的记录是否一致,都会发送update语句。@TestpublicvoidtestUpdate(){Newsnews=(News)session.get(News.class,1);transaction.commit();session.close();session=sessionFactory.openSession();transaction=session.beginTransaction();//news.setAuthor("oracle185");session.update(news);}

hibernate中Session.update()方法详解

6、如何能让update方法不再盲目的触发掼鸿乡羰update语句?在.hbm.xml文件的class节点设置select-before-update=墉掠载牿true;<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><classname="com.gwolf.domain.News"table="NEWS"select-before-update="true"><idname="id"type="java.lang.Integer"><columnname="ID"/><generatorclass="native"/></id><propertyname="title"type="java.lang.String"><columnname="TITLE"/></property><propertyname="author"type="java.lang.String"><columnname="AUTHOR"/></property><propertyname="date"type="java.util.Date"><columnname="DATE"/></property></class></hibernate-mapping>

hibernate中Session.update()方法详解

hibernate中Session.update()方法详解

7、可以看到触发了两条select语句。若数据表中没有对象的记录,但是还是调用了update方法,会抛出异常。

© 一点知识