1

同样的问题在这里,但它没有帮助我

DB:用户表、组和 group_has_user

我有三张桌子和多对多的连接。在我的 JSF 应用程序中,我正在尝试添加用户。在我的组表中有三个不同的组:管理员、客户和用户。

我做了什么:

  1. 将数据插入 jsf-form 后,用户单击保存。
  2. 名为 usersController 的 ManagedBean 从 groupsController 获取组(客户组)
  3. usersController ManagedBean 创建新用户并将其保存到 mySQL-db。
  4. 问题是 groups_has_user-table 是空的

和代码

用户:

public class Users implements Serializable {
@ManyToMany(mappedBy = "usersCollection")
private Collection<Groups> groupsCollection;

团体:

public class Groups implements Serializable {
    @JoinTable(name = "groups_has_user", joinColumns = {
        @JoinColumn(name = "groups_group_id", referencedColumnName = "group_id", nullable = false)}, inverseJoinColumns = {
        @JoinColumn(name = "user_username", referencedColumnName = "username", nullable = false)})
    @ManyToMany
    private Collection<Users> usersCollection;

UsersController-managedBean

// current is type Users
current.setIsCustomer(Boolean.TRUE);

//BalusC!! Why this is not working but the one below is?
//FacesContext facesContext = FacesContext.getCurrentInstance();
//HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
//GroupsController groupsC = (GroupsController)session.getAttribute("groupsController");

FacesContext context = FacesContext.getCurrentInstance();
GroupsController groupsC = (GroupsController) context.getApplication().evaluateExpressionGet(context, "#{groupsController}", GroupsController.class);

// Fetching group number 2, customer
Groups customerGroup = groupsC.getGroupByGroupId(new Integer(2));
List<Users> usersCollection = (List<Users>) customerGroup.getUsersCollection();
usersCollection.add(current);
//List<Groups> groupList = groupsC.getAllGroups();
customerGroup.setUsersCollection(usersCollection);
// Updating the group using GroupsController
groupsC.updateGroup(customerGroup);

//groupList.add(customerGroup);
//current.setGroupsCollection(groupList);
getFacade().create(current);

我获得加入表(groups_has_user)的唯一方法是将组同时添加到组表中,但是每个用户都有自己的线路,我认为这不是目的。很多人都问过这个问题,但即使我读了这些我也想不通。

谢谢和抱歉!萨米人

4

1 回答 1

1

我让它工作了。我的代码很乱,我清理了它,它有帮助。我不太确定为什么更新组表会在用户表中插入一个新用户,但这对我来说没问题。起初我更新了组表并将用户插入到用户表中,但我总是遇到一个异常,即已经存在 pk(用户名是 pk)。所以它对用户表做了两次插入,但现在它工作得很好。没有更多的行到组表只是到联合表和用户表。

// Add current new user to the customer-group
            usersCollection.add(currentUser);
            customerGroup.setUsersCollection(usersCollection);

            // Updating the group using GroupsController, THIS INSERTS USER TO USERS-table as well!!
            groupsC.updateGroup(customerGroup);
于 2012-04-05T18:28:33.510 回答