Hibernate 多对多的增删改查。
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 多对多的增删改查。相关推荐
- Hibernate 基本配置文件+基本增删改查
文件结构 maven 依赖 <!-- hibernate 核心依赖 --> <dependency><groupId>org.hibernate</group ...
- Hibernate入门案例及增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student {private Integer sid;private Int ...
- 利用Hibernate进行数据库的增删改查
Hibernate框架的主要作用是操纵数据库 因此其可以代替servlet中的DAO层,无需再写sql语句 因此也有对应的数据库增删改查的方法 1.添加数据 package com.oracle.se ...
- A.CTable开源框架Mybatis增强自动创建表/更新表结构/实现类似hibernate共通的增删改查-mybatis-enhance-actable
mybatis-enhance-actable-1.3.1.RELEASE 项目已更新既支持传统Spring项目也支持Springboot项目,同时支持tk.mybatis能够支持更强大的CUDR(为 ...
- S2SH框架入门之使用hibernate进行基础的增删改查
1.先建session: Session session = HibernateSessionFactory.getSession();Transaction tr=session.beginTran ...
- hibernate增删改查的标准范例
一个套用hibernate框架编写的增删改查小范例,此处分享一下,经过多次修改,从代码规范和后期维护,以及简洁程度上说:算是很标准的书写格式: package www.csdn.net.bookhom ...
- hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有
今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午--.也是刚刚好复习到这里 顺便就写写 注意:一般都在多方维护关系,至于是用单向还是用多向要看 ...
- Hibernate的四种典型例子(增删改查)
Hibernate的四种典型例子(增删改查) //查询 // Session session=HibernateSessionFactory.getSession(); // session.b ...
- hibernate实现增删改查的各种方法
1>接口(主要是增删改查的接口)BaseDao.java [java] view plain copy /** * * @author fly.zhou */ public interface ...
最新文章
- Android_NDK问题:APP_BUILD_SCRIPT points to an unknown file: project_path/jni/Android.mk
- boost::mpl模块实现iterator_tag相关的测试程序
- TypeScript学习笔记-声明合并
- 工作23:vue---封装request做数据请求
- 【Python 标准库学习】数据科学计算库 — math
- 计算机视觉论文-2021-06-28
- java php serialize_PHP serialize 和 JSON 解析与区别
- Python正则表达式,看完这篇文章就够了...#华为云·寻找黑马程序员#
- 27个澳洲年轻人,重演了少年马云的一段奇遇
- python使用opencv保存视频_Pythone OpenCV学习笔记之:视频文件读取与保存
- Android:如何使用资源名称从资源中获取字符串?
- lua能在stm32arm上运行吗_IOS App能在Mac运行!苹果这黑科技能撼动微软吗?
- ip_conntrack: falling back to vmalloc解决办法
- 17秋 SDN课程 第五次上机作业
- java下标和相等的矩阵_39.数组中数值和下标相等的元素
- IDEA多款主题颜色推荐!炫酷经典!
- 如何发布google离线地图及二次开发API
- 天猫国际2018年续签规则升级
- 自然语言处理NLP中的N-gram模型
- html实现简单动画,编写自己的代码库(css3常用动画的实现)
热门文章
- 【微信小程序开发】缓存Storage的存入与获取
- 12-机械键盘和普通键盘的区别
- 算法图解第七章狄克斯特拉算法读书笔记
- PTA团体程序设计天梯赛-练习集(3)
- AVX-512指令_mm512_shuffle_epi8分析
- 冯·诺依曼体系结构 -- 理解
- VS2010向工具箱中添加控件解决 Microsoft Communications Control,未能实例化 设计时授权
- [洛谷]P1978 集合 (#数学 -1.3)(#STL -1.1)
- PostGis部分点线相关函数测试
- 一种简单、安全的Dota全图新思路