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 に答える