hibernate中Session的saveOrUpdate()方法详解
1、Session的saveOrUpdate()方法同时包含了save()与update()方法的功能。
2、当数据库中没有此对象时将执行insert方法:
@Test
public void testSaveOrUpdate() {
News news = new News("tomcat","FF",new Date());
session.saveOrUpdate(news);
}
3、当对象设置了id时,程序将执行update语句:
@Test
public void testSaveOrUpdate() {
News news = new News("tomcat","FF",new Date());
news.setId(1);
session.saveOrUpdate(news);
}
4、如果OID不为null,但是数据库表中还没有和其对应的记录,会抛出异常。
5、如果OID值等于id的unsaved-value属性值的对象,也被认为是一个游离对象。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.gwolf.domain.News" table="NEWS">
<id name="id" type="java.lang.Integer" unsaved-value="11">
<column name="ID" />
<generator class="native" />
</id>
<property name="title" type="java.lang.String">
<column name="TITLE" />
</property>
<property name="author" type="java.lang.String">
<column name="AUTHOR" />
</property>
<property name="date" type="java.util.Date">
<column name="DATE" />
</property>
</class>
</hibernate-mapping>
6、现在我们再次运行单元测试,查看程序的结果。此时尽管ID不在数据库中,程序将会执行insert语句。