EJB3.0開発中のmappedByの使い方

2045 ワード

1、mappedByの使い方:
①、両エンティティBeanが双方向多対多関連である場合、mappedByを使用した一端を関係先(便宜上、被制御者)と呼び、他端を関係所有者(便宜上、制御者)と呼ぶ.対応するオブジェクトは以下、主制御対像と被制御オブジェクトと呼ぶ.注:仏山人が出した本には、ちょうど注釈が返ってきた.6.6.3節では、1対1のマッピングにおいて、1対1の関係は、関係維持側(owner side)の@OneToOne注釈でmappedBy属性を定義する必要がある.リレーションシップ被メンテナンス側(inverseside)に外部キー列がリレーションシップメンテナンス側を指すプライマリ・キー列を確立します.
②、コンテナは、上記のmappedBy関係に基づいて仮テーブルを作成する際に、「マスタテーブル名_被制御テーブル名」として作成される.
③、em.persist()メソッドを用いてマスターオブジェクトを追加し、マスター対像にマスター対像の集合属性を設定すると、マスター対像とマスター対像の関連関係が中間関連テーブルに増加する.逆に制御された対像を増加させると、mergeメソッドを使用して制御された対像を修正しない限り、関連関係は関連テーブルに増加しません.これがmappedByの使い方です.
④、例を挙げて説明する:
以上の3つのクラス(Userを除く)は双方向の多対多関係であり、エンティティにはカスケード関係はありません.UserはAccountに依存し、それらのカスケード関係はallであり、一方向の一対一の関係であり、UserはAccountにマッピングされる.TestCaseに次のコードを書きます.
PermissionManager manager = BeanLookup.getInstance().lookup(PermissionManager.class);

        // ;

manager.addPermission("KEY_6", new Dialect("Permission6", "zh_CN"),

new Dialect("description6", "zh_CN"), null, null);

Permission permission = manager.getPermissionByKey("KEY_6");

assertNotNull(permission);

Account account = new Account();

account.setAccount("557");

account.setPassword("557");

account.getPermissions().add(permission);

User user = new User();

user.setAccount(account);

user.setName(new Dialect("name1", "zh_CN"));

user.setCreationTime(new Date());

UserManager userManager = BeanLookup.getInstance().lookup(UserManager.class);

userManager.addUser(user);

UserとAccountはカスケードで保存されているため、AccountはUserが新たに追加されたときにも増加します.エンティティBeanでAccountをリレーショナルマスターに設定すると、上記の書き方では、accountとpermissionの関連関係が自動的に中間関連テーブルに書き込まれます.Accountが関係制御されている場合は、できません.(上記コードの赤色部分に注意)または手動でmerger(permission)を除去しても、関連関係を中間テーブルに書き込むことができます.
2、一つのTestCaseでCollectionを通過する.getSize()メソッドは、遅延の集合プロパティをロードするのに役立ちません.この方法はSession Beanでしか機能しない.