inverse

Hibernate 多对多的增删改查你得先了解inverse功能作用。

百度文档:

Inverse是hibernate双向关系中的基本概念。inverse的真正作用就是指定由哪一方来维护之间的关联关系。当一方中指定了“inverse=false”(默认),那么那一方就有责任负责之间的关联关系。

Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库。按照原来的映射文 件,people.getAddresses().add(address),即主控方对象的状态发生了改变,因此数据库会跟着对象状态的变化来同步更新 数据库;而address.setPeople(people),即被控方对象的状态发生了改变,它是不能触发对象和数据库的同步更新的。

下面直接上代码(简单的五表权限):

实体类:

Menu 实体类:

package com.zking.entity;import java.util.HashSet;
import java.util.Set;
import java.util.UUID;public class Menu {private String mid=String.valueOf(UUID.randomUUID());;private String mname;private transient Set<Role> sr=new HashSet<>();public Menu() {super();// TODO Auto-generated constructor stub}public Menu(String mid, String mname, Set<Role> 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;}public Set<Role> getSr() {return sr;}public void setSr(Set<Role> sr) {this.sr = sr;}}

Role实体类:

package com.zking.entity;import java.util.HashSet;
import java.util.Set;
import java.util.UUID;public class Role {private String rid=String.valueOf(UUID.randomUUID());;private String rname;private transient Set<Users> su=new HashSet<>();private Set<Menu> sm=new HashSet<>();public Role() {super();// TODO Auto-generated constructor stub}public Role(String rid, String rname, Set<Users> su, Set<Menu> sm) {super();this.rid = rid;this.rname = rname;this.su = su;this.sm = sm;}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;}public Set<Users> getSu() {return su;}public void setSu(Set<Users> su) {this.su = su;}public Set<Menu> getSm() {return sm;}public void setSm(Set<Menu> sm) {this.sm = sm;}}

Users实体类:

package com.zking.entity;import java.util.HashSet;
import java.util.Set;
import java.util.UUID;public class Users {private String uid=String.valueOf(UUID.randomUUID());private String uname;private Set<Role> sr=new HashSet<>();public Users() {super();// TODO Auto-generated constructor stub}public Users(String uid, String uname, Set<Role> 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;}public Set<Role> getSr() {return sr;}public void setSr(Set<Role> sr) {this.sr = sr;}}

实体类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 11:25:08 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping><class name="com.zking.entity.Menu" table="MENU"><id name="mid" type="java.lang.String"><column name="MID" /><generator class="assigned" /></id><property name="mname" type="java.lang.String"><column name="MNAME" /></property><set name="sr" table="rolemenu" inverse="true" lazy="false"cascade="save-update"><key column="mid"></key><many-to-many column="rid" class="com.zking.entity.Role"></many-to-many></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 11:25:08 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="assigned" /></id><property name="uname" type="java.lang.String"><column name="UNAME" /></property><set name="sr" table="usersrole" inverse="true" lazy="false"cascade="save-update"><key column="uid"></key><many-to-many class="com.zking.entity.Role" column="rid"></many-to-many></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 11:25:08 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping><class name="com.zking.entity.Role" table="ROLE"><id name="rid" type="java.lang.String"><column name="RID" /><generator class="assigned" /></id><property name="rname" type="java.lang.String"><column name="RNAME" /></property><set name="su" table="usersrole" inverse="false" lazy="false"cascade="save-update"><key column="rid"></key><many-to-many column="uid" class="com.zking.entity.Users"></many-to-many></set><set name="sm" table="rolemenu" inverse="false" lazy="false"cascade="save-update"><key column="rid"></key><many-to-many column="mid" class="com.zking.entity.Menu"></many-to-many></set></class>
</hibernate-mapping>

CFG.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 11:25:08 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="assigned" /></id><property name="uname" type="java.lang.String"><column name="UNAME" /></property><set name="sr" table="usersrole" inverse="true" lazy="false"cascade="save-update"><key column="uid"></key><many-to-many class="com.zking.entity.Role" column="rid"></many-to-many></set></class>
</hibernate-mapping>

测试类:

package com.zking.test;import java.util.Set;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;import com.alibaba.fastjson.JSON;
import com.zking.entity.Menu;
import com.zking.entity.Role;
import com.zking.entity.Users;public class MyTest {@Testpublic void add() {Configuration configuration = new Configuration().configure();SessionFactory sessionFactory = configuration.buildSessionFactory();Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();//用户Users u1=new Users();u1.setUname("admin");Users u2=new Users();u2.setUname("System");//角色Role r1=new Role();r1.setRname("Admin");Role r2=new Role();r2.setRname("System_Admin");//菜单Menu m1=new Menu();m1.setMname("角色管理");Menu m2=new Menu();m2.setMname("查看信息");//互设u1.getSr().add(r1);u2.getSr().add(r2);r1.getSu().add(u1);r2.getSu().add(u2);r1.getSm().add(m1);r2.getSm().add(m2);//保存session.save(u1);session.save(u2);//提交transaction.commit();session.close();sessionFactory.close();}@Testpublic void query() {Configuration configuration = new Configuration().configure();SessionFactory sessionFactory = configuration.buildSessionFactory();Session session = sessionFactory.openSession();//h获得当前用户Users u=session.get(Users.class, "265bdd39-5b11-4deb-9099-2b04a714ebe2");//转为JSON格式String str=JSON.toJSONString(u);//输出StrSystem.out.println(str);}@Testpublic void delete() {Configuration configuration = new Configuration().configure();SessionFactory sessionFactory = configuration.buildSessionFactory();Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();// 得到用户Users u = session.get(Users.class, "265bdd39-5b11-4deb-9099-2b04a714ebe2");// 得到当前用户所有权限Set<Role> sr = u.getSr();// 循环SET集合for (Role r : sr) {// 判断需要删除的权限if (r.getRname().equals("Admin")) {// 从权限表中获得用户再删除当前用户r.getSu().remove(u);}}session.update(u);transaction.commit();session.close();sessionFactory.close();}
}

代码什么的都在上面!

有什么不足的地方还请各位多多指教!!!

Hibernate 多对多的增删改查。相关推荐

  1. Hibernate 基本配置文件+基本增删改查

    文件结构 maven 依赖 <!-- hibernate 核心依赖 --> <dependency><groupId>org.hibernate</group ...

  2. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student {private Integer sid;private Int ...

  3. 利用Hibernate进行数据库的增删改查

    Hibernate框架的主要作用是操纵数据库 因此其可以代替servlet中的DAO层,无需再写sql语句 因此也有对应的数据库增删改查的方法 1.添加数据 package com.oracle.se ...

  4. A.CTable开源框架Mybatis增强自动创建表/更新表结构/实现类似hibernate共通的增删改查-mybatis-enhance-actable

    mybatis-enhance-actable-1.3.1.RELEASE 项目已更新既支持传统Spring项目也支持Springboot项目,同时支持tk.mybatis能够支持更强大的CUDR(为 ...

  5. S2SH框架入门之使用hibernate进行基础的增删改查

    1.先建session: Session session = HibernateSessionFactory.getSession();Transaction tr=session.beginTran ...

  6. hibernate增删改查的标准范例

    一个套用hibernate框架编写的增删改查小范例,此处分享一下,经过多次修改,从代码规范和后期维护,以及简洁程度上说:算是很标准的书写格式: package www.csdn.net.bookhom ...

  7. hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有

    今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午--.也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用多向要看 ...

  8. Hibernate的四种典型例子(增删改查)

    Hibernate的四种典型例子(增删改查)  //查询  // Session session=HibernateSessionFactory.getSession();  // session.b ...

  9. hibernate实现增删改查的各种方法

    1>接口(主要是增删改查的接口)BaseDao.java [java] view plain copy /** * * @author fly.zhou */ public interface  ...

最新文章

  1. Android_NDK问题:APP_BUILD_SCRIPT points to an unknown file: project_path/jni/Android.mk
  2. boost::mpl模块实现iterator_tag相关的测试程序
  3. TypeScript学习笔记-声明合并
  4. 工作23:vue---封装request做数据请求
  5. 【Python 标准库学习】数据科学计算库 — math
  6. 计算机视觉论文-2021-06-28
  7. java php serialize_PHP serialize 和 JSON 解析与区别
  8. Python正则表达式,看完这篇文章就够了...#华为云·寻找黑马程序员#
  9. 27个澳洲年轻人,重演了少年马云的一段奇遇
  10. python使用opencv保存视频_Pythone OpenCV学习笔记之:视频文件读取与保存
  11. Android:如何使用资源名称从资源中获取字符串?
  12. lua能在stm32arm上运行吗_IOS App能在Mac运行!苹果这黑科技能撼动微软吗?
  13. ip_conntrack: falling back to vmalloc解决办法
  14. 17秋 SDN课程 第五次上机作业
  15. java下标和相等的矩阵_39.数组中数值和下标相等的元素
  16. IDEA多款主题颜色推荐!炫酷经典!
  17. 如何发布google离线地图及二次开发API
  18. 天猫国际2018年续签规则升级
  19. 自然语言处理NLP中的N-gram模型
  20. html实现简单动画,编写自己的代码库(css3常用动画的实现)

热门文章

  1. 【微信小程序开发】缓存Storage的存入与获取
  2. 12-机械键盘和普通键盘的区别
  3. 算法图解第七章狄克斯特拉算法读书笔记
  4. PTA团体程序设计天梯赛-练习集(3)
  5. AVX-512指令_mm512_shuffle_epi8分析
  6. 冯·诺依曼体系结构 -- 理解
  7. VS2010向工具箱中添加控件解决 Microsoft Communications Control,未能实例化 设计时授权
  8. [洛谷]P1978 集合 (#数学 -1.3)(#STL -1.1)
  9. PostGis部分点线相关函数测试
  10. 一种简单、安全的Dota全图新思路