在Hibernate中,如何为多对多的自联接创建新的关系

时间:2012-12-16 09:40:40

标签: hibernate many-to-many hibernate-mapping self-join

我试图通过多对多的自我加入来维持用户和朋友之间的关系。我使用以下方法,但在数据库中没有创建任何关系。用户传递的方法参数是从用户输入创建的,只包含一个id。它还有一组只有id的朋友。这是代码:

 public User saveUserFriends(User user) {

     Transaction transaction = null;
        try {
            User retrievedUser = (User) session.get(User.class, user.getId());

            transaction = session.beginTransaction();

             for(User friend :user.getFriends()){
                System.out.println("friend "+friend.getId());
                friend = (User) session.get(User.class, friend.getId());
                System.out.println("retrieved user id "+user.getId());

                retrievedUser.getFriends().add(friend);

                session.save(retrievedUser);
                transaction.commit();
            }



        }catch (HibernateException e) {
            e.printStackTrace();
        } finally {
            session.close();
        }




    return user;
}

我的hibernate映射看起来像这样:

<hibernate-mapping>
    <class name="com.User" table="User">
        <id name="id" type="int">
        <column name="userId" />
            <generator class="native" />
        </id>
        <set name="friends" table="User_Friend" 
                inverse="true" lazy="false" cascade="none">
            <key column="userId"/>
            <many-to-many column="friendId" class="com.User" />
        </set>
        <set name="users" table="User_Friend" 
                inverse="true" lazy="false" cascade="none">
            <key column="friendId"/>
            <many-to-many column="userId" class="com.User" />
        </set>
    </class>
</hibernate-mapping>

输出仅选择。为什么没有创建关系?

1 个答案:

答案 0 :(得分:2)

我不是XML映射的专家,但多对多关联的两边都被标记为反面(inverse="true")。所以Hibernate在持久化用户时并不关心它们。