hibernate配置mysql数据库的 一对多 多对多 orm元数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caojidasabi/article/details/79096341

一.各表之间关系总览

从表里看出 company 和 user 是一对多关系
           user 和role 是多对多关系  urser_role 是中间表

二. 配置一对多 orm元数据

1.一的一方(主表)
对应的类 company  以及  orm元数据
public class Company {
	private Long company_id;
	private String company_name;
	
	//表达多对一关系
	private Set<User> users = new HashSet<User>();


	//getter,setter方法啊
	//无参构造函数
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	<!-- 配置表与实体的关系 -->
<hibernate-mapping package="domain">
	<class name="Company" table="company"><!-- name:类名 注意大小写  table:表名 -->
		<id name="company_id" column="company_id"><!-- OID name:表中属性名 column:列名 如果两者一致 可省略column-->
			<generator class="native"></generator><!-- 主键生成策略 -->
		</id>
		<property name="company_name" column="company_name" ></property>
	<!-- 一的一方(主表) 在配置文件中体现 -->
	<!-- cascade:主表中主键删除,自动删除从表中相关的行 inverse:主表放弃维护关系,让从表维护,默认false-->
	<set name="users" cascade="delete" inverse="true"><!-- set:用set的集合装User对象 name:set集合的变量名 -->
		<key column="company_id"></key><!-- 从表外键属性名(列名) -->
		<one-to-many class="User"/><!-- 一对多 class:多的一方的类名 -->
	</set>
	</class>
</hibernate-mapping>
2.多的一方(从表)对应的类 user 以及 orm元数据
public class User {
	private Long user_id;
	private  String username;
	private String password;
	
	private Long company_id ;
	private Long role_id;
	//表达一对多关系
	private Company company;
	
	
	//表达多对一关系
	private Set<Role> roles = new HashSet<Role>();
	
	//getter,setter方法啊
	//无参构造函数
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	<!-- 配置表与实体的关系 -->
<hibernate-mapping package="domain">
	<class name="User" table="user" >
		<id name="user_id" column="user_id">
			<generator class="native"></generator>
		</id>
		<property name="username" column="username" ></property>
		<property name="password" column="password"></property>
		<!-- 多对一  name:一的一方的引用对象名 column:主表的主键  class:主表的类名-->
		<many-to-one name="company" column="company_id" class="Company" cascade="save-update"></many-to-one>
		
		<set name="roles" table="user_role" cascade="save-update">
			<key column="user_id"></key>
			<many-to-many class="Role" column="role_id"></many-to-many>
		</set>
	</class>
</hibernate-mapping>

	
三.多对多
user表的对象 以及 orm元数据
public class User {
	private Long user_id;
	private  String username;
	private String password;
	
	private Long company_id ;
	private Long role_id;
	//表达一对多关系
	private Company company;
	
	
	//表达多对一关系
	private Set<Role> roles = new HashSet<Role>();
	
	//getter,setter方法啊
	//无参构造函数
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	<!-- 配置表与实体的关系 -->
<hibernate-mapping package="domain">
	<class name="User" table="user" >
		<id name="user_id" column="user_id">
			<generator class="native"></generator>
		</id>
		<property name="username" column="username" ></property>
		<property name="password" column="password"></property>
		<!-- 多对一  name:一的一方的引用对象名 column:主表的主键  class:主表的类名-->
		<many-to-one name="company" column="company_id" class="Company" cascade="save-update"></many-to-one>
		
		<!--name:引用别人的对象名  table:中间表名-->
		<set name="roles" table="user_role" cascade="save-update">
			<key column="user_id"></key><!-- column: 自己表的主键-->
			<many-to-many class="Role" column="role_id"></many-to-many><!-- 多对多 class:别人的类名 column:我引用别人的外键列名 -->
		</set>
	</class>
</hibernate-mapping>
2.role对象 以及 orm元数据
public class Role {
	private Long role_id;
	private String role_name;
	private String role_memo;
	
	//多对多关系
	private Set<User> users = new HashSet<User>();
	//getter,setter方法啊
	//无参构造函数

}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="domain">
	<class name="Role" table="role">
		<id name="role_id">
			<generator class="native"></generator>
		</id>
		<property name="role_name"></property>
		<property name="role_memo"></property>
		
		<set name="users" table="user_role" inverse="true">
			<key column="role_id" ></key>
			<many-to-many class="User" column="user_id"></many-to-many>
		</set>
	</class>
</hibernate-mapping>


如有错误,请多多指教!






猜你喜欢

转载自blog.csdn.net/caojidasabi/article/details/79096341