spring-data-jpa一对多多对一多对多关联

一对多、多对一

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(1);
        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(1);
    }
}

多对多

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 [email protected](name="teacherid") ,
            inverseJoinColumns [email protected](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(1);
    }
}

原文地址:https://www.cnblogs.com/dabrk/p/12002926.html

时间: 2024-10-21 13:16:40

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

spring data jpa 一对多查询

在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表.在数据库中建立一对多的关系,需要使用数据库的外键约束. 什么是外键? 指的是从表中有一列,取值参照主表的主键,这一列就是外键. package com.ytkj.entity; import javax.persistence.*; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * @Entity * 作用:

Spring Data JPA实战视频教程

视频大纲 JPA入门 Spring Data JPA入门 Repository的定义 查询方法的命名策略 JPQL查询,结果映射 Named Query,Named Native Query 排序,分页 JPA Criteria查询 Querydsl查询 Query by Example 一对一,一对多,多对一,多对多 @EnableJpaRepositories 注解 自定义.扩展Repository 实体的生命周期 审计 乐观锁,悲观锁 集成 OpenJPA 查询批注 缓存 事务 Sprin

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

Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多)介绍,SpringDataJpa应用分析 ------实体管理器   实体管理器EntityManager是实体与数据库的桥梁(和事务一起发挥作用),相当于Hibenrtae中的session,Mybatis中的sqlSession.使用方法放个小例子吧 @PersistenceContext pr

Spring data JPA中使用Specifications动态构建查询

有时我们在查询某个实体的时候,给定的条件是不固定的,这是我们就需要动态 构建相应的查询语句,在JPA2.0中我们可以通过Criteria接口查询,JPA criteria查询.相比JPQL,其优势是类型安全,更加的面向对象.而在Spring data JPA中相应的接口是JpaSpecificationExecutor,这个接口基本是围绕着Specification接口来定义的. Specification接口中只定义了如下一个方法: Predicate toPredicate(Root<T>

Spring Data JPA 1.10.1 详解二之快速Demo

一.maven配置文件加入依赖 Spring Data JPA 依赖,最新稳定的版本为1.10.1.RELEASE,这里需要说明下的是,其依然依赖hibernate JPA相关JAR,hibernate-core之类的是不需要的.hibernate是JPA规范的一种实现,所以需要加入其依赖.ehcache是hibernate二级缓存的配置,不是必须的. <dependency>         <groupId>org.springframework.data</groupI

Spring Data JPA进阶——Specifications和Querydsl

Spring Data JPA进阶--Specifications和Querydsl 本篇介绍一下Spring Data JPA中能为数据访问程序的开发带来更多便利的特性,我们知道,Spring Data repository的配置很简单,一个典型的repository像下面这样: public interface CustomerRepository extends JpaRepository<Customer, Long> { Customer findByEmailAddress(Str

spring data jpa基本介绍

jpa是将java对象持久化到关系型数据库的标准方式,spring data jpa作为spring data项目在关系型数据库数据访问层的解决方案,为简化jpa存储提供了良好的支持. 有关jpa的文章网上实在是太多太多,以下几篇写的比较不错,几乎涵盖了书中所有要讲的东西,也不copy来copy去的了,免得真正需要的人又搜出一大堆废话. jpa学习笔记:http://www.blogjava.net/luyongfa/archive/2012/11/01/390572.html spring d

Spring Data JPA 入门Demo

什么是JPA呢? 其实JPA可以说是一种规范,是java5.0之后提出来的用于持久化的一套规范:它不是任何一种ORM框架,在我看来,是现有ORM框架在这个规范下去实现持久层. 它的出现是为了简化现有的持久化框架,例如hibernate.Toplink等,让我们的程序再不用去使用这些现有的产品所提供的API,也就是说,我们只需遵循这套规范,用什么框架实现数据库操作就不会有太高的耦合度,JPA可以为我们降低耦合,并且简化我们的ORM操作. JPA主要提供3方面的技术: 1.ORM映射元数据,通常对应

深入浅出学Spring Data JPA

第一章:Spring Data JPA入门   Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务. Spring Data 包含多个子项目: Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化 JPA - 简化创建 JPA 数据访问层和跨存储的持久层功能 Hadoop - 基于 Spring 的 Hadoop 作业配置和一个 P

Spring Boot入门第二天:一个基于Spring Boot的Web应用,使用了Spring Data JPA和Freemarker。

今天打算从数据库中取数据,并展示到视图中.不多说,先上图: 第一步:添加依赖.打开pom.xml文件,添加必要的依赖,完整代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&q