考虑以下:
用户.java
class User{
...
private Set<Community> communities = new HashSet<Community>();
...
}
社区.java
class Community{
...
private Set<User> users = new HashSet<User>();
...
}
用户.hbm.xml
<set name="communities" cascade="save-update" lazy="false" table="tbl_user_community">
<key column="user_id" />
<many-to-many class="Community" column="community_id"/>
</set>
社区.hbm.xml
<set name="users" lazy="false" cascade="save-update" table="tbl_user_community" inverse="true">
<key column="community_id" />
<many-to-many class="User" column="user_id"/>
</set>
两者都有many-to-many
关系。
为用户添加社区的代码:
HibernateTemplate template = null;
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
template = new HibernateTemplate(sessionFactory);
User user = template.get(User.class, "100");
Community community = template.get(Community.class,1);
user.getCommunities().add(community);
template.saveOrUpdate(user);
设想:
- community1 分配给 user1(插入数据库)
- community2 分配给 user1(插入数据库)
- community1 分配给 user2(插入数据库)
- community2 分配给 user2 (未插入数据库,抛出
NonUniqueObjectException
)- 如果我使用
template.merge(user)
而不是template.saveOrUpdate(user)
..它可以工作..为什么???