0

我试图通过多对多自我加入来维持用户和朋友之间的关系。我正在使用以下方法,但从未在数据库中创建任何关系。用户传递的方法参数是从用户输入创建的,并且只包含一个 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-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>

输出只是选择。为什么没有建立关系?

4

1 回答 1

2

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

于 2012-12-16T09:51:37.747 回答