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. React:受控组件与非受控组件混用实战 - 译文

    原文链接:React: hybrid controlled components in action 受控组件 非受控组件 混用受控组件和非受控组件 原则一 原则二 原则三 原则四 实施方案 总结 F ...

  2. IIS处理并发请求设置

    一个ASP.NET项目在部署到生产环境时,当用户并发量达到200左右时,IIS出现了明显的请求排队现象,发送的请求都进入等待,无法及时响应,系统基本处于不可用状态.   当发现请求明显延迟,没有被即时 ...

  3. python第二十二天(面向对象)

    1.面向过程编程: 核心就是过程两个字,过程是指解决问题的步骤,即先干什么后做什么. 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题流程化.进而简单化 缺点:可扩展 ...

  4. vue请求PHP接口报错provisional headers are shown

    因为服务器相应时间太长, 所以出现这个提示. 解决办法: 把axios的请求超时的时间timeout的时间改长一点.

  5. supervisor 配置程序挂起自启动

    使用 supervisor 服务,将程序监控起来,如果程序挂掉了,可以实现自启动 编写 c++ 程序 test.c #include <stdio.h> #include <stri ...

  6. 关机,重启BAT命令

    关机命令shutdown -s -t 重启命令 shutdown -r -t

  7. HYPER -V 独立安装的 2016版本 中文版 下载好慢啊

    HYPER -V 独立安装的 2016版本 中文版 下载好慢啊

  8. mongodb4.0支持事务

    事务特性: 原子性:所有的改变都完成一致性:最终执行结果一致就行隔离性:一个事务的执行不能其它事务干扰.持久性:指一个事务一旦提交,数据不会改变,存在数据库中 exports.getSession = ...

  9. 原生JS制作简易Tabs组件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Day3----《Pattern Recognition and Machine Learning》Christopher M. Bishop

    其实今天只花了一点点时间来学习这本书, 如果模型的参数过多,而训练数据又不足够多的话,就会出现overfitting. overfitting可以通过regularization来解决,贝叶斯方法也可 ...