目录
扫描二维码关注公众号,回复:
2716316 查看本文章
多对多关联映射
-
数据库表
-
实体
User
package com.mark.domain;
import java.util.HashSet;
import java.util.Set;
public class User {
private Long user_id;
private String user_code;
private String user_name;
private String user_password;
private Character user_state;
//多对多
private Set<Role> roles = new HashSet<Role>();
//get|set方法省略...
}
Role
public class Role {
private Long role_id;
private String role_name;
private String role_memo;
//多对多
private Set<User> users = new HashSet<User>();
//get|set方法省略...
}
-
映射文件配置
注意inverse属性,不能让两个多方都去维护主键关系,那样的话,两个多方都会向第三张中间表插入相同主键,会造成异常
User.hbm.xml
核心语句
<set name="roles" table="sys_user_role" inverse="true">
<!-- key标签:
* column : 别人引用自己的主键 -->
<key column="user_id"></key>
<!-- many-to-many标签:
* class : 另一个多的类名
* column : 另一个多的主键 -->
<many-to-many class="Role" column="role_id"></many-to-many>
</set>
Role.hbm.xml
核心语句
<!-- 多对多关系 -->
<!-- set标签:
* name : 集合名
* table : 中间表表名,存储两个表外键 -->
<set name="users" table="sys_user_role">
<!-- key标签:
* column : 别人引用自己的主键 -->
<key column="role_id"></key>
<!-- many-to-many标签:
* class : 另一个多的类名
* column : 另一个多的主键 -->
<many-to-many class="User" column="user_id"></many-to-many>
</set>
-
主配置文件
hibernate.cfg.xml
核心语句
<!--Hibernate加载映射 -->
<mapping resource="com/mark/domain/User.hbm.xml"/>
<mapping resource="com/mark/domain/Role.hbm.xml"/>
-
级联优化
cascade属性(简化操作,少写代码)
<!-- set标签:
* name属性 :多的一方集合的属性名称
* cascade属性 :save-update(级联保存更新)、delete(级联删除)、all(前两者之和)-->