版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011301372/article/details/83188515
JavaBean的编写
public class User {
private Long userid;
private String username;
private String password;
//编写都是集合
private Set<Role> roles = new HashSet<Role>();
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
public Long getUserid() {
return userid;
}
public void setUserid(Long userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
public class Role {
private Long roleid;
private String rolename;
private Set<User> users = new HashSet<User>();
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
public Long getRoleid() {
return roleid;
}
public void setRoleid(Long roleid) {
this.roleid = roleid;
}
public String getRolename() {
return rolename;
}
public void setRolename(String rolename) {
this.rolename = rolename;
}
}
配置文件(多对多关系中必须有一方放弃对外键的维护)
<?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>
<class name="zst.cm.domain.User" table="sys_user">
<id name="userid" column="userid">
<generator class="native"/>
</id>
<property name="username" column="username"/>
<property name="password" column="password"/>
<!--配置多对多 name 集合的名称 table 中间表的名称-->
<set name="roles" table="sys_user_role" inverse="true">
<!--当前对象在中间表的外键的名称-->
<key column="uid"/>
<!-- class集合中存的对象的全路径-->
<!--column 集合中对象在中间表的外键的名称-->
<many-to-many class="zst.cm.domain.Role" column="rid"></many-to-many>
</set>
</class>
</hibernate-mapping>
<?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>
<class name="zst.cm.domain.Role" table="sys_role">
<id name="roleid" column="roleid">
<generator class="native"/>
</id>
<property name="rolename" column="rolename"/>
<set name="users" table="sys_user_role">
<key column="rid"/>
<many-to-many class="zst.cm.domain.User" column="uid"/>
</set>
</class>
</hibernate-mapping>
测试类
public class Demo2 {
@Test
public void run1(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
//多对多双向关联
User u1= new User();
u1.setUsername("张三");
User u2 = new User();
u2.setUsername("李四");
//创建角色
Role r1 = new Role();
r1.setRolename("经理");
Role r2 = new Role();
r2.setRolename("演员");
//关联
u1.getRoles().add(r1);
u1.getRoles().add(r2);
r1.getUsers().add(u1);
r1.getUsers().add(u2);
u2.getRoles().add(r1);
r1.getUsers().add(u2);
session.save(u1);
session.save(u2);
session.save(r1);
session.save(r2);
tr.commit();
}
}
级联保存
<!--User.hbm.xml-->
<set name="roles" table="sys_user_role" cascade="save-update">
<!--当前对象在中间表的外键的名称-->
<key column="uid"/>
<!-- class集合中存的对象的全路径-->
<!--column 集合中对象在中间表的外键的名称-->
<many-to-many class="zst.cm.domain.Role" column="rid"></many-to-many>
</set>
<!--Role.hbm.xml-->
<set name="users" table="sys_user_role" inverse="true">
<key column="rid"/>
<many-to-many class="zst.cm.domain.User" column="uid"/>
</set>
测试类
public void run2(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
//多对多双向关联
User u1= new User();
u1.setUsername("张三");
User u2 = new User();
u2.setUsername("李四");
//创建角色
Role r1 = new Role();
r1.setRolename("经理");
Role r2 = new Role();
r2.setRolename("演员");
//关联
u1.getRoles().add(r1);
u1.getRoles().add(r2);
u2.getRoles().add(r1);
session.save(u1);
session.save(u2);
tr.commit();
}
级联删除
public void run3(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
User u1 = session.get(User.class,3L);
Role r2 = session.get(Role.class,3L);
u1.getRoles().remove(r2);
tr.commit();
}