我试图通过多对多的自我加入来维持用户和朋友之间的关系。我使用以下方法,但在数据库中没有创建任何关系。用户传递的方法参数是从用户输入创建的,只包含一个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>
输出仅选择。为什么没有创建关系?
答案 0 :(得分:2)
我不是XML映射的专家,但多对多关联的两边都被标记为反面(inverse="true"
)。所以Hibernate在持久化用户时并不关心它们。