Hibernate多对多映射关系
1.先创建 3个实体类
package com.zking.entity;
import java.util.HashSet;
import java.util.Set;
public class Menus {
private String mid;
private String mname;
private Set<Roles> sr = new HashSet<Roles>();
public Set<Roles> getSr() {
return sr;
}
public void setSr(Set<Roles> sr) {
this.sr = sr;
}
public Menus() {
super();
// TODO Auto-generated constructor stub
}
public Menus(String mid, String mname, Set<Roles> sr) {
super();
this.mid = mid;
this.mname = mname;
this.sr = sr;
}
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getMname() {
return mname;
}
public void setMname(String mname) {
this.mname = mname;
}
}
package com.zking.entity;
import java.util.HashSet;
import java.util.Set;
public class Roles {
private String rid;
private String rname;
private Set<Users> su = new HashSet<Users>();
private Set<Menus> sm = new HashSet<Menus>();
public Set<Menus> getSm() {
return sm;
}
public void setSm(Set<Menus> sm) {
this.sm = sm;
}
public Set<Users> getSu() {
return su;
}
public Roles(String rid, String rname, Set<Users> su, Set<Menus> sm) {
super();
this.rid = rid;
this.rname = rname;
this.su = su;
this.sm = sm;
}
public Roles() {
super();
// TODO Auto-generated constructor stub
}
public void setSu(Set<Users> su) {
this.su = su;
}
public String getRid() {
return rid;
}
public void setRid(String rid) {
this.rid = rid;
}
public String getRname() {
return rname;
}
public void setRname(String rname) {
this.rname = rname;
}
}
package com.zking.entity;
import java.util.HashSet;
import java.util.Set;
public class Users {
private String uid;
private String uname;
private Set<Roles>sr=new HashSet<Roles>();
public Set<Roles> getSr() {
return sr;
}
public void setSr(Set<Roles> sr) {
this.sr = sr;
}
public Users() {
super();
// TODO Auto-generated constructor stub
}
public Users(String uid, String uname, Set<Roles> sr) {
super();
this.uid = uid;
this.uname = uname;
this.sr = sr;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
}
2.hibernate.cfg.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">sasa</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/books?characterEncoding=utf-8</property>
<property name="hibernate.connection.username">root</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/zking/entity/Menus.hbm.xml" />
<mapping resource="com/zking/entity/Roles.hbm.xml" />
<mapping resource="com/zking/entity/Users.hbm.xml" />
</session-factory>
</hibernate-configuration>
3.配置Menus.hbm.xml和Roles.hbm.xml和Users.hbm.xml映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-9-11 18:49:11 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.Menus" table="MENUS">
<id name="mid" type="java.lang.String">
<column name="MID" />
<generator class="guid" />
</id>
<property name="mname" type="java.lang.String">
<column name="MNAME" />
</property>
<set name="sr" table="rolemenus" cascade="sava-update" inverse="false">
<key>
<column name="mid" />
</key>
<many-to-many class="com.zking.entity.Roles" column="rid" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-9-11 18:49:11 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.Roles" table="ROLES">
<id name="rid" type="java.lang.String">
<column name="RID" />
<generator class="guid" />
</id>
<property name="rname" type="java.lang.String">
<column name="RNAME" />
</property>
<set name="su" table="userroles">
<key>
<column name="rid" />
</key>
<many-to-many class="com.zking.entity.Users" column="uid" />
</set>
<set name="sm" table="rolemenus" cascade="sava-update" inverse="true">
<key>
<column name="rid" />
</key>
<many-to-many class="com.zking.entity.Menus" column="mid" />
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-9-11 18:49:11 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.entity.Users" table="USERS">
<id name="uid" type="java.lang.String">
<column name="UID" />
<generator class="guid" />
</id>
<property name="uname" type="java.lang.String">
<column name="UNAME" />
</property>
<set name="sr" cascade="sava-update" table="ROLES" inverse="true">
<key>
<column name="uid" />
</key>
<many-to-many class="com.zking.entity.Roles" column="rid"/>
</set>
</class>
</hibernate-mapping>
4 . 测试类
package com.zking.test;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.zking.entity.Menus;
import com.zking.entity.Roles;
import com.zking.entity.Users;
public class MeU {
@Test
public void add() {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
// 创建users
Users u1 = new Users();
u1.setUname("admin");
// 创建角色
Roles r1 = new Roles();
r1.setRname("Admin");
// 创建菜单
Menus m1 = new Menus();
m1.setMname("sda");
// 互相设置
u1.getSr().add(r1);
r1.getSu().add(u1);
r1.getSm().add(m1);
m1.getSr().add(r1);
// 保存
session.save(u1);
session.save(r1);
session.save(m1);
// 提交
session.beginTransaction().commit();
// 关闭
session.close();
sessionFactory.close();
}
@Test
public void query() {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Users u1 = session.get(Users.class, "cb637e3b-b5bc-11e8-9945-54e1ad416ca2");
String str=JSON.toJSONString(u1);
System.out.println(str);
session.close();
sessionFactory.close();
}
@Test
public void delete() {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Users u1 = session.get(Users.class, "cb637e3b-b5bc-11e8-9945-54e1ad416ca2");
Set<Roles> sr = u1.getSr();
for (Roles roles : sr) {
if (roles.getRname().equals("Admin")) {
roles.getSu().remove(u1);
}
session.update(u1);
session.beginTransaction().commit();
session.close();
sessionFactory.close();
}
}
}