一对多、多对一

Country类

@Entity
@Table(name = "Country")
public class Country {
@Id
//sequence identity
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer countryid;
private String country;
//mappedBy:指定由谁维护关联关系(设置的是关联对象的属性名)
@OneToMany(cascade = CascadeType.ALL,mappedBy = "country")
//@JoinColumn(name="countryid")
private List<City> citys=new ArrayList<>(); //关联属性

City类

@Entity
@Table(name = "City")
public class City {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer cityid;
private String cityname;
@ManyToOne(cascade = CascadeType.ALL)
private Country country;

CountryDao层

public interface CountryDao extends JpaRepository<Country,Integer>{
}

CityDao层

public interface CityDao extends JpaRepository<City,Integer>{
}

CountryController

@Controller
public class CountryController { @Autowired
CountryDao dao; @Autowired
CityDao dao1; @Autowired
StudentDao dao2; @Autowired
TeacherDao dao3; //级联增加
@RequestMapping("/onetomany")
public String onetomany(){
Country c1=new Country();
c1.setCountry("中国万岁 ChinaNo.1");
City ct1=new City();
ct1.setCityname("中国香港");
City ct2=new City();
ct2.setCityname("中国台湾"); //维护国家与城市的一对多关系
c1.getCitys().add(ct1);
c1.getCitys().add(ct2); dao.save(c1);
return "success";
} //关联查询
@RequestMapping("/getcountry")
@ResponseBody
public Object get(){
return dao.findAll();
} //级联删除
@RequestMapping("/deleteCountry")
public String delete(){
//检索国家实体
Country one = dao.getOne();
dao.delete(one);
return "success";
} //由城市到国家的关联查询
@RequestMapping("/getCity")
@ResponseBody
public Object getCity(){
return dao1.findAll();
} //添加学生和老师
@RequestMapping("/saveStudent")
public String save(){
Student student1=new Student("利亚东哥");
Student student2=new Student("玉姐");
Student student3=new Student("雄哥"); Teacher t1=new Teacher("山间的风");
student1.getTeachers().add(t1);
student2.getTeachers().add(t1);
student3.getTeachers().add(t1);
dao2.saveAll(Arrays.asList(student1,student2,student3)); return "success"; } @RequestMapping("/saveTeacher")
public String saveTeacher(){
Teacher t1=new Teacher("帅的离谱");
List<Student> all = dao2.findAll();
t1.getStudents().addAll(all);
dao3.save(t1);
return "success";
} @RequestMapping("/getTeacher")
@ResponseBody
public Object getTeacher(){
return dao3.getOne();
}
}

多对多

Teacher

@Entity
@Table(name="teacherinfo")
public class Teacher {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer teacherid;
private String teachername;
@ManyToMany(cascade = CascadeType.ALL)
//mappedby属性绝对不能再存在@JoinTable和@JoinColumn注解时使用
@JoinTable(name="student_teacher",joinColumns =@JoinColumn(name="teacherid") ,
inverseJoinColumns =@JoinColumn(name="studentid") )
private List<Student> students=new ArrayList<>();

Student

@Entity
@Table(name = "studentinfo")
public class Student {
@Id
@GeneratedValue
private Integer id;
private String name;
private Integer age;
private Integer sex;
@Column(name = "stu_name")

TeacherDao

public interface TeacherDao extends JpaRepository<Teacher,Integer> {
}

StudentDao

public interface StudentDao extends JpaRepository<Student,Integer>{
}

StudentController

@Controller
public class StudentController{ @Autowired
StudentDao studentDao; @Autowired
TeacherDao teacherDao; //添加学生和老师
@RequestMapping("/addstu")
@ResponseBody
public String addstu(){
Student student1=new Student("丽丽");
Student student2=new Student("明明");
Student student3=new Student("安安"); Teacher teacher1=new Teacher("筱丽");
student1.getTeachers().add(teacher1);
student2.getTeachers().add(teacher1);
student3.getTeachers().add(teacher1); studentDao.saveAll(Arrays.asList(student1,student2,student3));
return "SUCCESS";
} //多对多添加老师
@RequestMapping("/addDom")
@ResponseBody
public String addDom(){
Teacher teacher=new Teacher("李老师");
List<Student> all = studentDao.findAll();
teacher.getStudents().addAll(all);
teacherDao.save(teacher);
return "SUCCESS";
} //多对多关联查询(慎用!!死循环!!)
@RequestMapping("/getDom")
@ResponseBody
public Object getDom(){
return teacherDao.getOne();
}
}

spring-data-jpa一对多多对一多对多关联的更多相关文章

  1. spring data jpa 一对多查询

    在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表.在数据库中建立一对多的关系,需要使用数据库的外键约束. 什么是外键? 指的是从表中有一列,取值参照主表的主键,这一列就是外键. pa ...

  2. Spring Data JPA 学习记录1 -- 单向1:N关联的一些问题

    开新坑 开新坑了(笑)....公司项目使用的是Spring Data JPA做持久化框架....学习了一段时间以后发现了一点值得注意的小问题.....与大家分享 主要是针对1:N单向关联产生的一系列问 ...

  3. Spring Data Jpa一对多单向映射

    /** @author StormMaybin @date 2017-01-17 */ 生命不息,奋斗不止! 一对多映射关系 在JPA中,用@OneToMany来标识一对多的关系.实现一对多的单向关联 ...

  4. Spring Data JPA one to one 共享主键关联

    /** * Created by xiezhiyan on 17-9-13. */@Entitypublic class Token { @Id @Column(name = "store_ ...

  5. spring data jpa 多对多查询

    package com.ytkj.dao; import com.ytkj.entity.Customer; import com.ytkj.entity.Role; import org.sprin ...

  6. spring data jpa 多对多 ManyToMany

    环境搭建 源码地址:gitee:https://gitee.com/ytfs-dtx/JPA 导入依赖 <properties> <spring.version>5.2.5.R ...

  7. Spring Data JPA 初体验

    一,JPA相关的概念 JPA概述 全称是:JavaPersistence API.是SUN公司推出的一套基于ORM的规范. Hibernate框架中提供了JPA的实现. JPA通过JDK 5.0注解或 ...

  8. Spring Data JPA实体详解

    1. Spring Data JPA实体概述 JPA提供了一种简单高效的方式来管理Java对象(POJO)到关系数据库的映射,此类Java对象称为JPA实体或简称实体.实体通常与底层数据库中的单个关系 ...

  9. Spring Boot + Spring Data JPA + PostgreSQL

    最近在用Java重写之前实习生用.netcore写的微信后台应用. 规定用Spring Boot框架,PostgreSQL数据库.之前一直习惯于基于XML的Spring app,也没用过Postgre ...

  10. Spring Data Jpa系列教程--------实体解析和关联关系

    Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多) ...

随机推荐

  1. PAT(B) 1055 集体照(Java)

    题目链接:1055 集体照 (25 point(s)) 题目描述 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一 ...

  2. Python简介及开发环境搭建

    Python简介 Python是一门动态解释性的强类型定义的计算机程序设计语言,是一种完全面向对象的语言,由荷兰人"龟叔"-Guido van Rossum于1989年开发,于19 ...

  3. werkzeug.routing.BuildError: Could not build url for endpoint 'index'. Did you mean 'user.index' instead?

    werkzeug.routing.BuildError: Could not build url for endpoint 'index'. Did you mean 'user.index' ins ...

  4. 【IDEA使用技巧】(5) —— IntelliJ IDEA集成Tomcat部署Maven Web项目

    1.IntelliJ IDEA集成Tomcat部署Maven Web项目 1.1.IDEA构建Maven Web项目 使用IDEA来创建一个简单的Hello World的Maven Web项目,并使用 ...

  5. lmir 随笔

    近期需要研究一些特征工程的工作,就打算把微软之前公布出来的特征都复现一遍,今天遇到的特征是 LMIR, 其实也就是language model for information retrieval的简写 ...

  6. enum类型的标签内容根据语言的取法

    昨天做了一个开发,说要取enum里面英文label 例如  JournalType   枚举值有   transfer\profit/loss 但是在中文的AX系统时会显示“转移\盈亏”, 但是客户又 ...

  7. js node md5模块使用问题

    问题描述:md5(123456)得到的结果不是正确的. why? 问题查找: 1)安装路径问题: yarn add md5(md5模块在npmjs中显示每周download人数高达百万,有问题还这么多 ...

  8. DevExtreme学习笔记(一) DataGrid中数据提交注意事项

    1.数据提交的{}数据需转化json格式 syncPost('/controller/action', { values: JSON.stringify({d:x}) }, function (res ...

  9. Java对list进行分页,subList()方法实现分页

    /** * 自定义List分页工具 * @author hanwl */ public class PageUtil { /** * 开始分页 * @param list * @param pageN ...

  10. 【转载】关于SimpleDateFormat安全的时间格式化线程安全问题

    想必大家对SimpleDateFormat并不陌生.SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调 ...