pojo:

package com.example.zs.springDataJpa;

import org.hibernate.annotations.Proxy;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set; @Entity
@Table(name="t_role")
public class UserRole {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Integer id ;
@Column(name="name")
private String name;
@Column(name="name1")
private String name1;
@Column(name="name2")
private String name2;
@OneToMany(mappedBy="userRolehh", fetch = FetchType.EAGER)
private Set<JpaUser> userSet = new HashSet<>();
@ManyToMany(cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
//创建t_role_menu表,PRIMARY KEY (`roleid`,`menuid`),
// FOREIGN KEY (`roleid`) REFERENCES `t_role` (`id`)
//FOREIGN KEY (`menuid`) REFERENCES `t_menu` (`menu_id`)
//不改变t_role表,不改变t_menu表

@JoinTable(name="t_role_menu",joinColumns =@JoinColumn(name="roleid") ,inverseJoinColumns =@JoinColumn(name="menuid"))
// private Set<Menu> menuList = new HashSet<>() ; set list都可以
private List<Menu> menuList = new ArrayList<>() ; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Set<JpaUser> getUserSet() {
return userSet;
} public void setUserSet(Set<JpaUser> userSet) {
this.userSet = userSet;
} public String getName1() {
return name1;
} public void setName1(String name1) {
this.name1 = name1;
} public String getName2() {
return name2;
} public void setName2(String name2) {
this.name2 = name2;
} public List<Menu> getMenuList() {
return menuList;
}
}
package com.example.zs.springDataJpa;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Proxy; import javax.persistence.*; @Entity
@Table(name="t_user")
public class JpaUser {
// @Column(name="name")
private String name ;
// @Column(name="address")
private String address ;
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
// @GeneratedValue(strategy=GenerationType.TABLE,generator="table_gen")
// @TableGenerator(
// name = "table_gen",
// table="fendo_generator",
// pkColumnName="seq_name", //指定主键的名字
// pkColumnValue="fendos", //指定下次插入主键时使用默认的值
// valueColumnName="seq_id", //该主键当前所生成的值,它的值将会随着每次创建累加
// initialValue = 1, //初始化值
// allocationSize=1 ) //累加值
@Id
private Integer id ;
// @Column(name="age1")
private Integer age ;
// @Column(name="age11")
private Integer age1 ;
// @ManyToOne(cascade = CascadeType.PERSIST)
@ManyToOne
@JoinColumn(name="roleFK")
private UserRole userRolehh; public JpaUser(String name, String address, Integer age, Integer age1 ) {
this.name = name;
this.address = address;
this.age = age;
this.age1 = age1;
// this.id = id;
} public JpaUser() {
} @Override
public String toString() {
return "JpaUser{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", id=" + id +
", age=" + age +
", age1=" + age1 +
'}';
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Integer getAge1() {
return age1;
} public void setAge1(Integer age1) {
this.age1 = age1;
} public UserRole getUserRolehh() {
return userRolehh;
} public void setUserRole(UserRole userRolehh) {
this.userRolehh = userRolehh;
}
}
package com.example.zs.springDataJpa;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set; @Entity
@Table(name ="t_menu")
public class Menu {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer menuId ;
private String menuName ;
private String menuUrl;
private Integer fatherId ;
//menu跟role是多对多关系
@ManyToMany(mappedBy ="menuList" )
private Set<UserRole> roleSet = new HashSet<>();
// private List<UserRole> roleList = new ArrayList<>(); public void setMenuId(Integer menuId) {
this.menuId = menuId;
} public void setMenuName(String menuName) {
this.menuName = menuName;
} public void setMenuUrl(String menuUrl) {
this.menuUrl = menuUrl;
} public void setFatherId(Integer fatherId) {
this.fatherId = fatherId;
} public void setRoleSet(Set<UserRole> roleSet) {
this.roleSet = roleSet;
} public Set<UserRole> getRoleSet() {
return roleSet;
} public Integer getMenuId() {
return menuId;
}
}
package com.example.zs.springDataJpa;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; public interface UserRoleSpecificationExcutor extends JpaRepository<UserRole,Integer> , JpaSpecificationExecutor<UserRole> {
}

保存示例:

  @Test
public void save () {
UserRole userRole = new UserRole();
userRole.setName("角色");
Menu menu = new Menu();
Menu menu1 = new Menu();
userRole.getMenuList().add(menu);
userRole.getMenuList().add(menu1);
menu.setMenuName("顶级菜单");
menu.setMenuUrl("菜单0");
menu.setFatherId();
menu1.setMenuName("菜单1");
menu1.setMenuUrl("菜单1");
menu1.setFatherId(); userRoleSpecificationExcutor.save(userRole); // Optional<UserRole> op = userRoleSpecificationExcutor.findById(1);
// System.out.println(op);
}

查询示例:

@Test
public void test2 () { // Optional<JpaUser> a= userSpecificationExcutor.findById(13);
Optional<UserRole> ab = userRoleSpecificationExcutor.findById();
System.out.println("---"); // System.out.println(optionalT.get());
// userRespotory.findByIdxUseHQL("hehe",1);
// for(JpaUser user : list){
// }
}

spring boot - 整合jpa多对对关系保存和查询示例的更多相关文章

  1. spring boot 系列之四:spring boot 整合JPA

    上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...

  2. Spring Boot整合JPA、Redis和Swagger2

    好久没有总结了,最近也一直在学习.今天就把spring boot与其它技术的整合做个小总结,主要是jpa.redis和swagger2.公司里有用到这些,整合起来也很简单. 首先,新建一个Spring ...

  3. Spring Boot 整合 JPA 使用多个数据源

    介绍 JPA(Java Persistence API)Java 持久化 API,是 Java 持久化的标准规范,Hibernate 是持久化规范的技术实现,而 Spring Data JPA 是在 ...

  4. Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源

    本文是 Spring Boot 整合数据持久化方案的最后一篇,主要和大伙来聊聊 Spring Boot 整合 Jpa 多数据源问题.在 Spring Boot 整合JbdcTemplate 多数据源. ...

  5. Spring Boot2 系列教程(二十四)Spring Boot 整合 Jpa

    Spring Boot 中的数据持久化方案前面给大伙介绍了两种了,一个是 JdbcTemplate,还有一个 MyBatis,JdbcTemplate 配置简单,使用也简单,但是功能也非常有限,MyB ...

  6. Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany

    问题描述 在利用Spring boot data JPA进行表设计的时候,表对象之间经常存在各种映射关系,如何正确将理解的映射关系转化为代码中的映射关系是关键之处. 解决办法 概念理解 举例:在公司的 ...

  7. spring boot 整合JPA多数据源

    上个文章介绍了spring boot在使用Mybatis持久化技术的时候如何使用多数据源,今天再补充一个使用spring data jpa实现多数据源的使用情况,JPA是一套数据库持久化规范,或者称之 ...

  8. Spring Boot从入门到精通之:二、Spring Boot整合JPA

    springboot-jpa 开发工具 系统: windows10 开发工具: Intellij IDEA 2018.2.6 springboot: 2.0.6.RELEASE jdk: 1.8.0_ ...

  9. spring boot - 整合jpa

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

随机推荐

  1. Centos 部署.net Core

    1.安装net core框架 sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo ...

  2. vsftp搭建

    (1)下载 yum install -y vsftpd (2)目录详情 /etc/vsftpd/vsftpd.conf:vsftpd 的核心配置文件 /etc/vsftpd/ftpusers:用于指定 ...

  3. 用Java开发一个工具类,提供似于js中eval函数功能的eval方法

    今天在看到<Java疯狂讲义>中一个章节习题: 开发一个工具类,该工具类提供一个eval()方法,实现JavaScript中eval()函数的功能--可以动态运行一行或多行程序代码.例如: ...

  4. iOS 中文转拼音

    - (NSString * ) chineseToPinyin:(NSString *) chinese{ CFStringRef hanzi = (__bridge CFStringRef)(chi ...

  5. java自动化-关键字驱动在junit接口自动化的应用

    本文是继承上文的基础上进行的讨论,建议读者先阅读http://www.cnblogs.com/xuezhezlr/p/9097137.html和https://www.cnblogs.com/xuez ...

  6. 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼

    目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...

  7. JOISC2019 游记

    JOISC2019 游记 Day 1: 試験 (Examination) 题目大意: 有\(n(n\le10^5)\)个人,每个人有两种属性\(s_i,t_i\).\(q(q\le10^5)\)次询问 ...

  8. Python数据模型及Pythonic编程

    Python作为一种多范式语言,它的很多语言特性都能从其他语言上找到参照,但是Python依然形成了一套自己的“Python 风格”(Pythonic).这种Pythonic风格完全体现在 Pytho ...

  9. html2canvas在Vue项目踩坑-生成图片偏移不完整

    背景 最近做一个Vue项目需求是用户长按保存图片,页面的数据是根据不同id动态生成的,页面渲染完生成内容图片让用户长按保存的时候,把整个页面都保存起来. 在项目遇到的坑是图片能生成,可是生成的图片总是 ...

  10. VMware ESXi 6.5 安装

    1.1下载esxi镜像 此处我使用的版本是:VMware-VMvisor-Installer-6.5.0-4564106.x86_64 1.2新建一个虚拟机,硬件兼容性处选择ESXI6.5 硬盘40g ...