系统用的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