CascadeType.REMOVE 级联删除操作,删除当前实体时,与它有映射关系的实体也会跟着被删除。
CascadeType.MERGE 级联更新(合并)操作,当Student中的数据改变,会相应地更新Course中的数据。
CascadeType.DETACH 级联脱管/游离操作,如果你要删除一个实体,但是它有外键无法删除,你就需要这个级联权限了。它会撤销所有相关的外键关联。
CascadeType.REFRESH 级联刷新操作,假设场景 有一个订单,订单里面关联了许多商品,这个订单可以被很多人操作,那么这个时候A对此订单和关联的商品进行了修改,与此同时,B也进行了相同的操作,但是B先一步比A保存了数据,那么当A保存数据的时候,就需要先刷新订单信息及关联的商品信息后,再将订单及商品保存。
CascadeType.ALL 拥有以上所有级联操作权限。

一(被拥有方)mappedBy,mappedBy = "‘多’的实体类的属性字段",mappedBy 为被拥有方
多(拥有方) @JoinColumn

-----------------------------------------------------------------------

一对一
people 用户表(id,name,sex,birthday,address_id)

address 地址表(id,phone,zipcode,addr)

people 表
@Entity
public class People {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "id", nullable = false)
   private Long id;//id
   @Column(name = "name", nullable = true, length = 20)
   private String name;//姓名
   @Column(name = "sex", nullable = true, length = 1)
   private String sex;//性别
   @Column(name = "birthday", nullable = true)
   private Timestamp birthday;//出生日期

@OneToOne(cascade=CascadeType.ALL)
   //People是关系的维护端,当删除 people,会级联删除 address
   @JoinColumn(name = "address_id", referencedColumnName = "id")
   //name:关联id,referencedColumnName:地址表id
   private Address address;//地址
}
关联的实体的主键一般是用来做外键的。但如果此时不想主键作为外键,则需要设置referencedColumnName属性。
当然这里关联实体(Address)的主键 id 是用来做主键,所以这里第23行的 referencedColumnName = "id" 实际可以省略。

address 表
@Entity
public class Address {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;//id
    @Column(name = "phone", nullable = true, length = 11)
    private String phone;//手机
    @Column(name = "zipcode", nullable = true, length = 6)
    private String zipcode;//邮政编码
    @Column(name = "addr", nullable = true, length = 100)
    private String addr;//地址

//如果不需要根据Address级联查询People,可以注释掉,mappedBy = "People实体类中address属性"
//    @OneToOne(mappedBy = "address", cascade = {CascadeType.MERGE, CascadeType.REFRESH}, optional = false)
//    private People people;
}

-----------------------------------------------------------------------

一对多
author 作者表(id,name)

article 文章表(id,title,conten,author_id)

author 表
@Entity
public class Author {
    @Id // 主键
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 自增长策略
    private Long id; //id
    @NotEmpty(message = "姓名不能为空")
    @Size(min=2, max=20)
    @Column(nullable = false, length = 20)
    private String name;//姓名

//mappedBy = "Article实体类中author属性"
    @OneToMany(mappedBy = "author",cascade=CascadeType.ALL,fetch=FetchType.LAZY)
    //级联保存、更新、删除、刷新;延迟加载。当删除用户,会级联删除该用户的所有文章
    //拥有mappedBy注解的实体类为关系被维护端
    private List<Article> articleList;//文章列表
}

article 表

@Entity
    public class Article {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY) // 自增长策略
        @Column(name = "id", nullable = false)
        private Long id;
        @NotEmpty(message = "标题不能为空")
        @Size(min = 2, max = 50)
        @Column(nullable = false, length = 50) // 映射为字段,值不能为空
        private String title;
        @Lob  // 大对象,映射 MySQL 的 Long Text 类型
        @Basic(fetch = FetchType.LAZY) // 懒加载
        @NotEmpty(message = "内容不能为空")
        @Size(min = 2)
        @Column(nullable = false) // 映射为字段,值不能为空
        private String content;//文章全文内容

//可选属性optional=false,表示author不能为空。删除文章,不影响用户
        @ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=false)
        //author_id关联author的id字段
    @JoinColumn(name = "author_id", referencedColumnName = "id")
        private Author author;//所属作者
    }

-----------------------------------------------------------------------

多对多(可以随意指定一方为关系维护端 @JoinColumn)
user 用户表(id,username,password)

user_authority 中间表(user_id,authority_id)

authority 权限表(id,authname)

User.java

@Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        @NotEmpty(message = "账号不能为空")
        @Size(min=3, max=20)
        @Column(nullable = false, length = 20, unique = true)
        private String username; // 用户账号,用户登录时的唯一标识
        @NotEmpty(message = "密码不能为空")
        @Size(max=100)
        @Column(length = 100)
        private String password; // 登录时密码
        @ManyToMany
        @JoinTable(name = "user_authority",joinColumns = @JoinColumn(name = "user_id"),
        inverseJoinColumns = @JoinColumn(name = "authority_id"))
        //关系维护端,负责多对多关系的绑定和解除,即实现User.setAuthorityList(authority)
        // @JoinTable name:关联表的名字,joinColumns:关联User表的id,inverseJoinColumns:关联Authority表的id
        private List<Authority> authorityList;
    }

Authority.java

@Entity
    public class Authority {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;
        @Column(nullable = false)
        private String authname; //权限名
    //mappedBy = "User实体类中authorityList属性"
        @ManyToMany(mappedBy = "authorityList")
        private List<User> userList;
    }

-------------------------------------------------------------------------------------

Spring Data JPA 关系映射(一对一,一对多,多对多 )的更多相关文章

  1. JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用

    下面把项目中的用户类中有个:一对一  一对多  多对多的注解对应关系列取出来用于学习      说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...

  2. spring data jpa 一对多查询

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

  3. JPA、Hibernate、Spring data jpa之间的关系,终于明白了

    什么么是JPA? 全称Java Persistence API,可以通过注解或者XML描述[对象-关系表]之间的映射关系,并将实体对象持久化到数据库中. 为我们提供了: 1)ORM映射元数据:JPA支 ...

  4. 转:spring data jpa、 hibernate、 jpa 三者之间的关系

    原文链接:spring data jpa. hibernate. jpa 三者之间的关系 spring data jpa hibernate jpa 三者之间的关系 JPA规范与ORM框架之间的关系是 ...

  5. JPA总结——实体关系映射(一对多@OneToMany)

    JPA总结——实体关系映射(一对多@OneToMany) 注意:本文出自“阿飞”的博客,如果要转载本文章,请与作者联系! 并注明来源: http://blog.sina.com.cn/s/blog_4 ...

  6. spring data jpa、 hibernate、 jpa 三者之间的关系

    http://www.cnblogs.com/xiaoheike/p/5150553.html JPA规范与ORM框架之间的关系是怎样的呢? JPA规范本质上就是一种ORM规范,注意不是ORM框架-- ...

  7. 浅谈jpa、hibernate与spring data jpa三者之间的关系

    1.解释hibernate之前先了解下什么是orm,orm是object relation mapping,即对象关系映射,object可以理解成java实体类Entity,relation是关系型数 ...

  8. Spring Data JPA 梳理 - JPA与“Spring、Spring Data JPA”的关系

    JPA其实也就是java实体对象和关系型数据库建立起映射关系,通过面向对象编程的思想操作关系型数据库的规范. Spring 框架对 JPA 提供的支持主要体现在如下几个方面: 首先,它使得 JPA 配 ...

  9. Spring Boot-JPA、Hibernate、Spring data jpa之间的关系

    什么么是JPA? 全称Java Persistence API,可以通过注解或者XML描述[对象-关系表]之间的映射关系,并将实体对象持久化到数据库中. 为我们提供了: 1)ORM映射元数据:JPA支 ...

随机推荐

  1. MQTT的学习研究(三)moquette-mqtt 的使用之mqtt服务发布主题信息

    接着上一篇的moquette-mqtt 的使用之broker启动之后,我们需要启动moquette-mqtt 的服务端发布消息. 在moquette-mqtt 的mqtt-client中三种方式实现发 ...

  2. MQTT的学习研究(一)MQTT学习网站

    MQTT的官方推荐网站: http://mqtt.org/software 使用IBM 的MQTT协议实现push消息地址: http://tokudu.com/2010/how-to-impleme ...

  3. oracle的分页查询,mabatis的sql配置

    <select id="getCardcaseByPage" resultType="Cardcase" > select * from ( sel ...

  4. 无法远程访问Mysql

    1.故障状态 [root@server02 ~]# mysql -utuser -h192. -p Enter password: ERROR (HY000): Can't connect to My ...

  5. Linux系统下 MongoDB安装搭建

    1.下载linux的mongodb 2.在目录usr/local下创建文件夹mongodb,把安装包解压到该文件夹中 # mkdir mongodb # tar -zxvf mongodb-3.4.2 ...

  6. C++和C#的思考

    从2011年从业至今已经写了7年C++了,而C#.go语言虽然早有涉猎,但直到最近才开始思考语言的发展和工程之间的关系. C++ 更容易写出高内聚代码使用指针做原地内存操作直接堆栈控制,减少内存分配, ...

  7. java个人所得税计算器

    class Caculate{ private String name; private double money; private double actual; /** * @param usern ...

  8. Spring boot官方文档学习(一)

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

  9. CMDB内功心法,助我登上运维之巅

    很多70.80后甚至90后都在金庸.古龙.梁羽生先生等武林大家熏陶下成长的,这么多年过去了,我的武侠梦依然不曾散去.曾几何,梦想有一天练就一身绝学,搂着小师妹花前月下,仗剑走天涯,快意人生.可每次的酣 ...

  10. 洛谷P2024 食物链 [NOI2001] 并查集

    正解:并查集 解题报告: 传送门(咕了! 其实没有很难(虽然我是交了三发才过的QAQ 但是一来好久没打并查集了恢复一下智力 二来看着智推里唯一一个蓝就很不爽(,,,虽然做了这题之后又补上了个蓝题QAQ ...