JPA(六)多対多
8527 ワード
1.多対多エンティティクラスの構成
2、注釈説明
-@ManyToManyの役割:マルチペアのマルチリレーションシップ属性をマッピングするために使用されます:cascade:カスケード操作を構成します.fetch:遅延ロードを使用するかどうかを構成します.targetEntity:ターゲットのエンティティクラスを構成します.マッピングが多対多の場合は書かなくてもいいです.@JoinTable役割:中間テーブルの構成プロパティ:name:中間テーブルの名前joinColumnsの構成:中間テーブルの外部キーフィールド現在のエンティティークラスに対応するテーブルを関連付けるプライマリ・キーフィールドinverseJoinColumn:中間テーブルの外部キーフィールド相手テーブルを関連付けるプライマリ・キー・セグメント-@JoinColumn役割:プライマリ・キーフィールドと外部キーの定義フィールドの対応関係.属性:name:外部キーフィールドの名前referencedColumnNameを指定:プライマリ・テーブルを参照するプライマリ・キーフィールド名uniqueを指定します:一意かどうか.デフォルト値がユニークではないnullable:空に許可されているかどうか.デフォルトでは許可されています.insertable:挿入を許可するかどうか.デフォルトでは許可されています.updatable:更新を許可するかどうか.デフォルトでは許可されています.columnDefinition:カラムの定義情報.
3テスト
3.1、保存
3.2削除
@Entity
@Table(name = "role")
public class Role {
@Id
@Column(name = "role_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long roleId;
@Column(name = "role_name")
private String roleName;
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "user_role", joinColumns = {@JoinColumn(name = "rid",referencedColumnName="role_id")},
inverseJoinColumns = {@JoinColumn(name = "uid",referencedColumnName="user_id")})
private Set userList = new HashSet<>();
}
@Entity
@Table(name = "users")
public class Users {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
@Column(name = "user_name")
private String userName;
@Column(name = "user_address")
private String address;
@Column(name = "user_gender")
private String gender;
@ManyToMany(cascade=CascadeType.ALL,mappedBy="userList")
private Set roles = new HashSet<>(0);
}
2、注釈説明
-@ManyToManyの役割:マルチペアのマルチリレーションシップ属性をマッピングするために使用されます:cascade:カスケード操作を構成します.fetch:遅延ロードを使用するかどうかを構成します.targetEntity:ターゲットのエンティティクラスを構成します.マッピングが多対多の場合は書かなくてもいいです.
3テスト
3.1、保存
/**
*
* 1、
*/
@Test
public void testAdd() {
//
Role role1 = new Role();
Role role2 = new Role();
Users users1 = new Users();
Users users2 = new Users();
role1.setRoleName(" 1");
role1.getUserList().add(users1);
role1.getUserList().add(users2);
role2.setRoleName(" 2");
role2.getUserList().add(users2);
users1.setAddress(" ");
users1.setGender(" ");
users1.setUserName(" ");
users1.getRoles().add(role1);
users2.setAddress(" ");
users2.setGender(" ");
users2.setUserName(" ");
users2.getRoles().add(role1);
users2.getRoles().add(role2);
EntityManager em = null;
EntityTransaction tx = null;
try {
//
em = JpaUtil.getEntityManager();
//
tx = em.getTransaction();
//
tx.begin();
//
em.persist(role1);
//
tx.commit();
} catch (Exception e) {
//
tx.rollback();
e.printStackTrace();
} finally {
//
em.close();
}
}
( ) , , , , 2
, , , :
, , :
@ManyToMany(mappedBy="roles")
private Set users = new HashSet(0);
3.2削除
/**
*
* : 。
* :
*
* 1、
* 2、 ,
* :
*
* , !( )
*/
@Test
public void testRemove() {
//
EntityManager em = null;
EntityTransaction tx = null;
try {
//
em = JpaUtil.getEntityManager();
//
tx = em.getTransaction();
//
tx.begin();
//
Users u = em.find(Users.class, 2L);
em.remove(u);
//
tx.commit();
} catch (Exception e) {
//
tx.rollback();
e.printStackTrace();
} finally {
//
em.close();
}
}
:
@OneToMany(targetEntity=LinkMan.class,mappedBy="customer",cascade=CascadeType.AL
L) // CascadeType.REMOVE
private Set linkmans = new HashSet(0);