hibernate 双向多对多配置
用户(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