SysUser和SysUserIM为one-to-one关系。
SysUser.hbm.xml代码如下
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <hibernate-mapping> <class name="com.model.SysUser" table="TBL_SYS_USERS"> <id name="userId" type="java.lang.String"> <column name="USER_ID" length="40" /> <generator class="native" /> </id> <property name="userName" type="java.lang.String"> <column name="USER_NAME" length="100" /> </property> <one-to-one name="sysUserIM" class="com.model.SysUserIM" cascade="all" /> </class> </hibernate-mapping>
SysUserIM.hbm.xml代码如下
<?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> <class name="com.model.SysUserIM" table="TBL_SYS_USER_IM"> <id name="userId" type="java.lang.String"> <column name="USER_ID"/> <generator class="foreign"> <param name="property">sysUser</param> </generator> </id> <property name="userName" type="java.lang.String"> <column name="USER_NAME" length="100" /> </property> <property name="userImage"> <column name="USER_IMAGE" /> </property> <one-to-one name="sysUser" class="com.model.SysUser" constrained="true" /> </class> </hibernate-mapping>
对应的java类 如下
SysUserIM sysUserIM=new SysUserIM(); sysUserIM.setUserImage(Hibernate.createBlob(bdata)); sysUserIM.setUserName(username); sysUserIM.setSysUser(sysUser); sysuser是一个已经取得数据的对象
持久类里执行代码如下
getHibernateTemplate().saveOrUpdate(sysUserIM);
我的问题是当sysUserIM里的userId不进行赋值的时候也就是为null的时候, 两次执行同一个userid的sql时 两次都是执行insert语句。
当 sysUserIM里的userId进行赋值的时候 两次执行同一个userid的sql时 两次都是执行update语句。
希望得到的结果是 第一次执行的时候为insert,第二次执行的时候 由于sysUserIM里已经含有了相同userid的数据 应该执行update。
不知道代码什么地方有问题,望指点