3

netbeans を使用してエンティティとファサードを生成しました。以下は、動作/更新する例です。

私はそれが機能する結合テーブルによって結合された2つのテーブルを持っています:

ユーザー

PK: ユーザーID

カテゴリー

PK: カテゴリ ID

ユーザー_カテゴリ

複合 PK: ユーザー ID | categoryID (他の列はありません)

両側の関係を考慮して、結合テーブルを更新する方法:

    //set up user Categories
    List<Category> categoryList = new ArrayList<Category>();

    //get all the current categories for the current user
    categoryList.addAll(user.getCategoryList());

    //clear out user for that type (to reset)
    for(Category c : categoryList){
        tempUserList.clear();
        tempUserList = c.getUserList();
        tempUserList.remove(user);
        c.setUserList(tempUserList);
        categoryFacade.edit(c);
    }

    categoryList.clear();
    //where selectedCategoryListString is a list of category names
    for(String s : selectedCategoryListString){
        categoryList.add(categoryFacade.findByCategoryName(s));
    }

    for(Category c : categoryList){
        tempUserList.clear();
        tempUserList = c.getUserList();
        tempUserList.add(user);
        c.setUserList(tempUserList);
        categoryFacade.edit(c);
    }
    user.setCategoryList(categoryList);
    userFacade.edit(user);

上記は機能し、関係の両側を処理します。私が立ち往生しているところは以下です。余分な「年」列があるため、「スキル」にはメソッド「.getUserList()」がありません。代わりに、「.getUserSkillList()」があります。上記のように、結合テーブルをどのように更新すればよいかわかりません。「年」列は毎回「」(空白)に設定されると想定できます。

以下: 問題のあるテーブル/関係:

ユーザー

ユーザーID

スキル

スキルID

ユーザースキル

ユーザー ID | スキルID | 年

重要なのは、ユーザーがユーザー ID を持っていることです。Skill には skillID があり、UserSkill には userID と skillID およびその他の列で構成される複合主キーがあります。年。

4

2 に答える 2

0

エンティティ クラスを見ずに確認するのは難しいですが、次のようなものを探している可能性があります。

@ManyToMany(cascade = CascadeType.MERGE, ...)

カスケード タイプ

于 2013-04-06T09:01:07.787 に答える
0

休止状態を使用していた場合、その問題はclassCascade.UPDATEUserSkillプロパティにa を追加するだけで解決されUserます。

ただし、休止状態を使用していないため、手動で行うことができます。を更新するときは、それに関連するUserものを取得し、それらも更新します。UserSkills

それを行う際に特定の問題がある場合は、回答を更新するようにお知らせください

于 2013-04-06T05:56:55.713 に答える