私は、多対多の自己参加を持つユーザーと友人の間の関係を維持しようとしています。次の方法を使用していますが、データベースにリレーションが作成されていません。メソッドパラメータを渡されたユーザーは、ユーザー入力から作成され、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>
出力は選択のみです。関係が作成されないのはなぜですか?