当前位置: 代码迷 >> Java Web开发 >> hibernate执行update,余总是执行insert,请大神指导下为什么
  详细解决方案

hibernate执行update,余总是执行insert,请大神指导下为什么

热度:76   发布时间:2016-04-14 08:59:19.0
hibernate执行update,缺总是执行insert,请大神指导下为什么
系统用的ssh框架

@Override
public void iniPrivilege(Privilege privilege) {
Privilege pl = null;
String hql = null;
// String hql = "from Privilege p where p.name=? and p.url=?";
if(privilege.getUrl() == null){
hql = "from Privilege p where p.name=?";
pl = (Privilege)getSession().createQuery(hql)
.setParameter(0, privilege.getName())
.uniqueResult();
}else{
hql = "from Privilege p where p.name=? and p.url=?";
 pl = (Privilege)getSession().createQuery(hql)
.setParameter(0, privilege.getName())
.setParameter(1, privilege.getUrl())
.uniqueResult();
}

if(pl == null)
this.save(privilege);
else{
pl.setIcon(privilege.getIcon());
pl.setParent(privilege.getParent());
System.out.println("kkkkkkkkkkkkkkkk");
this.getSession().update(pl);
}

执行上面的this.getSession().update(pl);,却总是在添加新的条目,下面是 hbm.xml

<class name="Privilege" table="ch_privilege">
<id name="id">
            <generator class="native"/>
</id>
<property name="url"/>
<property name="name"/>
<property name="icon"/>

<set name="roles" table="ch_role_privilege">
<key column="privilegeId"></key>
<many-to-many class="Role" column="roleId"></many-to-many>
</set>

<many-to-one name="parent" class="Privilege" column="parentId"  ></many-to-one>

<set name="children" order-by="id" lazy="false">
<key column="parentId"></key>
<one-to-many class="Privilege"/>
</set>

</class>
------解决思路----------------------
this.getSession().update(pl);  改成 this.update(pl);获取一个新的连接后认为是一个新的实体pl了所以就insert了撒。
------解决思路----------------------
肯定执行insert,if(pl == null)这个判断进来说明pl对象是个空对象,你把Privilege的一些属性赋值给了pl这个对象,然后执行update,此时update的对象pl是一个新的对象,会执行插入操作
------解决思路----------------------
楼主的this.update(pl) 换成this.merge(pl);试试,就知道什么问题了,看到底这个pl是insert还是update
  相关解决方案