使用S2SH集成做登陆时,根据username和userpwd去对应的employee表中查询是否有对应记录,我使用的方法是getHibernateTemplate().find(hql, object[]),但是我在debug查询时,发现hibernate执行的语句是这样的:
Hibernate: select employee0_.eid as eid15_, employee0_.username as username15_, employee0_.realname as realname15_, employee0_.userpwd as userpwd15_, employee0_.email as email15_, employee0_.sex as sex15_, employee0_.oid as oid15_, employee0_.did as did15_ from myprj.tb_employee employee0_ where employee0_.username=? and employee0_.userpwd=?
Hibernate: select organise0_.oid as oid17_0_, organise0_.organame as organame17_0_ from myprj.tb_organise organise0_ where organise0_.oid=?
Hibernate: select duty0_.did as did16_0_, duty0_.dname as dname16_0_ from myprj.tb_duty duty0_ where duty0_.did=?
Hibernate:
insert into myprj.tb_organise (organame) values (?)
Hibernate:
update myprj.tb_employee set username=?, realname=?, userpwd=?, email=?, sex=?, oid=?, did=? where eid=?
居然执行了insert语句,这里的tb_organise表中的oid和tb_duty表中的did是tb_employee表的外键,duty是正常的,但是为什么在organise表中会插入一条记录,且对应的employee的oid会指向新插入的这条记录。相关配置如下,还希望大家帮我分析下是什么原因?这是我的employee的映射文件
<many-to-one name="duty" class="net.gicp.xhf1989.MyPrj.pojo.Duty" column="did" lazy="false" cascade="save-update">
</many-to-one>
<many-to-one name="organise" class="net.gicp.xhf1989.MyPrj.pojo.Organise" column="oid" lazy="false" cascade="save-update">
</many-to-one>
这是organise对应的配置
<hibernate-mapping>
<class name="net.gicp.MyPrj.pojo.Organise" table="tb_organise" catalog="myprj">
<id name="orgaId" type="java.lang.Integer">
<column name="oid" />
<generator class="native" />
</id>
<property name="orgaName" type="java.lang.String">
<column name="organame" length="45"/>
</property>
</class>
</hibernate-mapping>
我验证的方法:
/**
* 验证登录
* @param sql
* @param o
* @return
*/
public List doLogin(String sql,Object[] o)
{
return this.getHibernateTemplate().find(sql, o);
}
employee的表设计如下:
大家帮我分析下呢,谢谢啦