使用hibernate插入一条记录以后需要返回该记录的ID,ID采用oracle10g的自增长。下面是关键代码。问题描述:举例来说方便点。数据库里面最大的用到的ID是100了,这时候插入,正常情况数据库记录的ID应该是101,下面方法返回的也是101,可是数据库插入的记录ID是102,方法返回的的101请高手解惑。 public Integer saveZjsb(Zjsb transientInstance) {
log.debug("saving Zjsb instance");
int id = 0;
try {
getSession().save(transientInstance);
getSession().flush();
id = transientInstance.getId();
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
return id;
}没分了,见谅。
log.debug("saving Zjsb instance");
int id = 0;
try {
getSession().save(transientInstance);
getSession().flush();
id = transientInstance.getId();
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
return id;
}没分了,见谅。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.firstssh.model">
<class name="Zjsb" table="BZZL_ZJSB" schema="BZZL_ZJSB">
<id name="id" type="java.lang.Integer">
<column name="ID" precision="9" scale="0" />
<generator class="sequence">
<param name="sequence">BZZL_ZJSB_SEQ</param>
</generator>
</id>
<property name="sqlx" type="java.lang.String">
<column name="SQLX" length="10"/>
</property>
<property name="xmlbid" type="java.lang.String">
<column name="XMLBID" length="10" />
</property>
<property name="slbh" type="java.lang.String">
<column name="SLBH" length="20" />
</property>
<property name="projectNm" type="java.lang.String">
<column name="PROJECT_NM" length="500" not-null="true" />
</property>
<property name="organCd" type="java.lang.String">
<column name="ORGAN_CD" length="9" not-null="true" />
</property>
<property name="organNm" type="java.lang.String">
<column name="ORGAN_NM" length="120" />
</property>
<property name="sbyj" type="java.lang.String">
<column name="SBYJ" length="4000" not-null="true" />
</property>
<property name="tbrq" type="java.util.Date">
<column name="TBRQ" length="7" />
</property>
<property name="status" type="java.lang.String">
<column name="STATUS" length="10" />
</property>
<property name="bz" type="java.lang.String">
<column name="BZ" length="1000" />
</property>
<property name="clsj" type="java.util.Date">
<column name="CLSJ" length="7" />
</property>
<property name="sqclurl" type="java.lang.String">
<column name="SQCLURL" length="2000" />
</property>
<property name="fjurl" type="java.lang.String">
<column name="FJURL" length="2000" />
</property>
<property name="fjurl2" type="java.lang.String">
<column name="FJURL2" length="2000" />
</property>
</class>
</hibernate-mapping>
getSession().flush();
id = transientInstance.getId(); 你这段代码就有问题了,getSession().save(transientInstance); 执行这的时候按照hibernate的原理transientInstance实例 transientInstance.getId() 应该是空的。但是你能获得此处的id?那你还用hibernate的sequence来自动增长id做什么?不知你是否明白
若这点道理还不清楚的话建议楼主去看点hibernate的书。
getSession().save(transientInstance);
提交之前transientInstance.getId() 为空没错。提交之后你再看看
transientInstance.getId()还为空吗?
hibernate已经帮你把ID都set进去了