spring boot - 整合jpa多对对关系保存和查询示例
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多对对关系保存和查询示例的更多相关文章
- spring boot 系列之四:spring boot 整合JPA
上一篇我们讲了spring boot 整合JdbcTemplate来进行数据的持久化, 这篇我们来说下怎么通过spring boot 整合JPA来实现数据的持久化. 一.代码实现 修改pom,引入依赖 ...
- Spring Boot整合JPA、Redis和Swagger2
好久没有总结了,最近也一直在学习.今天就把spring boot与其它技术的整合做个小总结,主要是jpa.redis和swagger2.公司里有用到这些,整合起来也很简单. 首先,新建一个Spring ...
- Spring Boot 整合 JPA 使用多个数据源
介绍 JPA(Java Persistence API)Java 持久化 API,是 Java 持久化的标准规范,Hibernate 是持久化规范的技术实现,而 Spring Data JPA 是在 ...
- Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
本文是 Spring Boot 整合数据持久化方案的最后一篇,主要和大伙来聊聊 Spring Boot 整合 Jpa 多数据源问题.在 Spring Boot 整合JbdcTemplate 多数据源. ...
- Spring Boot2 系列教程(二十四)Spring Boot 整合 Jpa
Spring Boot 中的数据持久化方案前面给大伙介绍了两种了,一个是 JdbcTemplate,还有一个 MyBatis,JdbcTemplate 配置简单,使用也简单,但是功能也非常有限,MyB ...
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
问题描述 在利用Spring boot data JPA进行表设计的时候,表对象之间经常存在各种映射关系,如何正确将理解的映射关系转化为代码中的映射关系是关键之处. 解决办法 概念理解 举例:在公司的 ...
- spring boot 整合JPA多数据源
上个文章介绍了spring boot在使用Mybatis持久化技术的时候如何使用多数据源,今天再补充一个使用spring data jpa实现多数据源的使用情况,JPA是一套数据库持久化规范,或者称之 ...
- Spring Boot从入门到精通之:二、Spring Boot整合JPA
springboot-jpa 开发工具 系统: windows10 开发工具: Intellij IDEA 2018.2.6 springboot: 2.0.6.RELEASE jdk: 1.8.0_ ...
- spring boot - 整合jpa
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...
随机推荐
- Spring 开发常见问题
linux 下http 接收中文参数乱码 解决: 在application.yml配置文件中添加 spring: http: encoding: charset: GB2312
- python第十六天
一.包 1.什么是包? 一系列模块的集合 2.有什么用? 包通过文件夹来管理一系列功能相近的模块 3.包重点? 包中一定有一个专门用来管理包中所有模块的文件 __init__ 4.什么是包名? 包 ...
- Mapreduce求气温值项目
Mapreduce前提工作 简单的来说map是大数据,reduce是计算<运行时如果数据量不大,但是却要分工做这就比较花时间了> 首先想要使用mapreduce,需要在linux中进行一些 ...
- JAVA递归生成树形菜单
递归生成一个如图的菜单,编写两个类数据模型Menu.和创建树形的MenuTree.通过以下过程实现: 1.首先从菜单数据中获取所有根节点. 2.为根节点建立次级子树并拼接上. 3.递归为子节点建立次级 ...
- webpack问题列表及解决方案
1.提升webpack打包速度 2.cssloader顺序有先后 3.如何正确引用图片 4.打包后访问不到json文件 5.打包后如何访问项目 6.打包后的文件 7.为什么执行webpack,就可以打 ...
- 生产环境,vue页面跳转的时候,js报404的问题
最近上线的一个vue项目,需要各种路由跳转,在开发和测试环境都没问题,但是在生产环境,发现后期更新代码的时候,有些机型(ios机型,暂未发现android有问题)跳转路由的时候,标题修改了,但是内容并 ...
- 【转载】JAVA基础复习与总结<三> Object类的常用方法
Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类.这里主要总结Object类中的三个常用方法:toString().equ ...
- VB6进行GZIP解压&C#进行GZIP压缩和解压
VB进行GZIP解压的,DLL是系统的,如果没有 [点击下载] Option Explicit 'GZIP API '----------------------------------------- ...
- java 新手指南
Java新手指南 不小心走上了一条不归路的我 因为对可视化感兴趣,然后学了MFC,发现MFC好麻烦啊,不如开发APP吧,刚学开发APP,艹,居然是用java做开发,那只好学java了,,呜呜,不知道什 ...
- [AtCoder 2702]Fountain Walk - LIS
Problem Statement In the city of Nevermore, there are 108 streets and 108 avenues, both numbered fro ...