User.hbm.xml:
<set cascade="all" inverse="true" name="activeFriends" sort="unsorted">
<key column="concernedUserId"/>
<one-to-many class="Friends"/>
</set>
<set cascade="all" inverse="true" name="passiveFriends" sort="unsorted">
<key column="userId"/>
<one-to-many class="Friends"/>
</set>`
Friends.hbm.xml:
<composite-id>
<key-many-to-one name="activeUser" column="userId" class="User"></key-many-to-one>
<key-many-to-one name="passiveUser" column="concernedUserId" class="User"></key-many-to-one>
</composite-id>
DaoImpl:
/**
* 添加用户关注
*/
public void userAddConcern(int userId,int concernedUserId) {
Session session=null;
User activeUser=null;
User passiveUser=null;
try{
session = HibernateUtil.getSession();
session.getTransaction().begin();
activeUser=(User)session.createQuery("from User user where user.id=:id").setInteger("id",userId).uniqueResult();
passiveUser=(User)session.createQuery("from User user where user.id=:id").setInteger("id",concernedUserId).uniqueResult();
if(activeUser==null||passiveUser==null)
{
return;
}
Friends friend=new Friends();
friend.setActiveUser(activeUser);
friend.setPassiveUser(passiveUser);
activeUser.getPassiveFriends().add(friend);
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
session.close();
}
}
/**
* 取消用户关注
*/
public void userRemoveConcern(int userId, int concernedUserId) {
Session session=null;
User activeUser=null;
User passiveUser=null;
try{
session = HibernateUtil.getSession();
session.getTransaction().begin();
activeUser=(User)session.createQuery("from User user where user.id=:id").setInteger("id",userId).uniqueResult();
passiveUser=(User)session.createQuery("from User user where user.id=:id").setInteger("id",concernedUserId).uniqueResult();
if(activeUser==null||passiveUser==null)
{
return;
}
Friends friend=new Friends();
friend.setActiveUser(activeUser);
friend.setPassiveUser(passiveUser);
activeUser.getPassiveFriends().remove(friend);
session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
session.close();
}
}
这两个函数功能大致是模仿微博上用户关注的功能
问题是第一个函数功能正常,第二个函数没反应。
第二个函数主要功能是取消关注,对象activeUser打印后,确实在passiveFriend集合里面将那个关注的关系删掉了,但是commit没有作用。这是为什么??
关键就在于这个Friends friend=new Friends();
你虽然想remove掉这个实体,但是数据库中无法找到,进而删除不了!你应该给这个实体set一个主键 (我个人这么想)
能让我看下getPassiveFriends() 里面的remove函数吗?