1

ここで同じ質問ですが、それは私を助けませんでした

DB:ユーザー-テーブル、グループ、およびgroup_has_user

私は3つのテーブルと多対多の接続を持っています。JSFアプリケーションで、ユーザーを追加しようとしています。私のグループテーブルには、管理者、顧客、ユーザーの3つの異なるグループがあります。

私がしたこと:

  1. jsf-formにデータを挿入した後、ユーザーは[保存]をクリックします。
  2. usersControllerと呼ばれるManagedBeanは、groupsControllerからグループ(customer-group)をフェッチします
  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

私はそれを動かしました。私のコードは散らかっていて、それを一掃して助けてくれました。groups-tableを更新すると、Users-tableに新しいユーザーが挿入される理由はよくわかりませんが、問題はありません。最初に、groups-tableを更新し、userをusers-tableに挿入しましたが、すでにpkが存在するという例外が常に発生しました(usernameはpkです)。そのため、users-tableに2つの挿入を行いましたが、現在は完全に機能しています。グループテーブル、ジョイントテーブル、ユーザーテーブルへの行はもうありません。

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