Hibernate之多对多关联映射

目录

多对多关联映射

数据库表

实体

User

Role 

映射文件配置

User.hbm.xml

Role.hbm.xml

主配置文件

hibernate.cfg.xml

级联优化

cascade属性(简化操作,少写代码)


多对多关联映射

  • 数据库表

  • 实体

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(前两者之和)-->

猜你喜欢

转载自blog.csdn.net/mmake1994/article/details/81543752