欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate 双向多对多配置

程序员文章站 2022-04-24 14:18:20
...

 

用户(User)和角色(Role)是多对多的关系。

 

一个用户可以对应多个角色,一个角色也可以对应多个用户。

 

比如张三对应CEO,保洁2个角色,而保洁也可以对应张三,李四2个用户。

 

通常多对多关系,必须引出第3张表。

 

1.从User这一端开始配。

 

在User里面必须有一个集合set来存放角色,举例如下。

 

package com.bjpowernode.hibernate.domain;

import java.util.Set;


public class User {
	private int id;
	private String name;
	
	private Set roles;
	
	public Set getRoles() {
		return roles;
	}
	public void setRoles(Set roles) {
		this.roles = roles;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	
}

 

那么配置如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

	<class name="com.bjpowernode.hibernate.domain.User" table="t_user">
		<id name="id">
			<generator class="native"/>
		</id>
		
		<property name="name"/>
		
		<set name="roles" table="t_user_role">
			<key column="user_id"/>
			<many-to-many class="com.bjpowernode.hibernate.domain.Role" column="role_id"/>
		</set>
	
	</class>
	
</hibernate-mapping>

 

说明:凡是碰到set,在配置文件中肯定用set标签,name就是指在User类中的集合名,在set还必须指定一个表名,这里就是指第3张表:t_user_role

 

然后下面配置一个外键,是和User相关的,这里起名叫user_id,

然后下面配置set集合里面放置的对象,即Role,而且也要给它起个列名role_id,放在第三张表里。

 

至此,单向的多对多配置完成。

 

--------------------------------------------------------------------------------------------------------------------

下面配置双向多对多的关系。

 

Role类中添加User的集合,代码如下:

package com.bjpowernode.hibernate.domain;

import java.util.Set;


public class Role {
	private int id;
	private String name;
	private Set users; 
	
	public Set getUsers() {
		return users;
	}
	public void setUsers(Set users) {
		this.users = users;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	
}

 

配置如下,和User的配置差不多:

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

	<class name="com.bjpowernode.hibernate.domain.Role" table="t_role">
		<id name="id">
			<generator class="native"/>
		</id>
		
		<property name="name"/>
		
		<set name="users" table="t_user_role">
			<key column="role_id"/>
			<many-to-many class="com.bjpowernode.hibernate.domain.User" column="user_id"/>
		</set>
	
	</class>
	
</hibernate-mapping>

 

这样双向多对多就配置完成了。

 

在保存时,先保存谁都无所谓。

 

 

 refurl:http://blog.csdn.net/yinghuayu1324117/article/details/6519331