1

ManyToMany 関係に関連する 2 つの Hibernate オブジェクト Group と User があります。

次のマッピングを使用します

Group.java

private Set<User> users = new HashSet<User>(0);

...

@ManyToMany(cascade = CascadeType.ALL)  
@JoinTable(name = "user_group",
joinColumns = { @JoinColumn(name = "GROUP_ID") },
inverseJoinColumns = { @JoinColumn(name = "USER_ID") })
public Set<User> getUsers() {
    return this.users;
}
...

ユーザー.java

private Set<Group> groups = new HashSet<User>(0);

...


@ManyToMany(mappedBy = "users") 
public Set<Group> getGroups() {
    return this.groups;
}

...

DAO.java

public User addUserToGroup (Integer groupId , Integer  userId){
    Group group = (Group) getBeanById(groupId, Group.class); //Here I get the right group
    User user = (User) getBeanById(userId, User.class);//Here I get the right user
    group.getUsers().add(user);
    user.getGroups().add(group);
    save(group);        
    return user;
}

保存方法

public EntityBase save(EntityBase transientInstance) {
    Session session = HibernateUtil.getCurrentSession();
    log.debug("persisting  instance");
    try {
        session.saveOrUpdate(transientInstance);
        log.debug("persist successful");
        return transientInstance;
    } catch (RuntimeException re) {
        log.error("save failed", re);
        throw re;
    }
}

私の問題は、グループにユーザーを追加すると、関連付けテーブルにレコードが追加されないことuser_groupです。

NB : begin ステートメントと commit ステートメントはフィルター サーブレットで呼び出されます。

4

2 に答える 2

2

上記のコードは、本来すべきことを実行します。私の問題は、ユーザーのリストの表示にありました.Hibernateは、ダーティなユーザーコレクションを検出して削除します。私がやったことは、関係の所有権をユーザーではなくグループに変更することであり、すべて正常に動作しました。

于 2012-05-09T20:32:19.523 に答える
1

あなたはこのように電話しなければなりません

save(group); 
user.getGroups().add(group);
save(user);

エンティティの反対側は休止状態で更新されるため、更新する必要はありません。

于 2012-05-06T16:57:44.453 に答える