jpa实现多表查询

  • 多表之间的关系
    • 一对一 注解说明
    • 一对多注解说明
    • 多对多注解说明

多表之间的关系

  1. 一对一
  2. 一对多
  3. 多对多

一对一 注解说明

@OneToOne:
作用:建立一对一的关系映射
属性:
targetEntityClass:指定多的多方的类的字节码
mappedBy:指定从表实体类中引用主表对象的名称。
cascade:指定要使用的级联操作
fetch:指定是否采用延迟加载
orphanRemoval:是否使用孤儿删除
@JoinColumn
作用:用于定义主键字段和外键字段的对应关系。
属性:
name:表示的是当前类中的属性名
referencedColumnName:表示的则是 School 类中对应的属性名
unique:是否唯一。默认值不唯一
nullable:是否允许为空。默认值允许。
insertable:是否允许插入。默认值允许。
updatable:是否允许更新。默认值允许。
columnDefinition:列的定义信息。

一对多注解说明

@OneToMany:
作用:建立一对多的关系映射
属性:
targetEntityClass:指定多的多方的类的字节码
mappedBy:指定从表实体类中引用主表对象的名称。
cascade:指定要使用的级联操作
fetch:指定是否采用延迟加载
orphanRemoval:是否使用孤儿删除

@ManyToOne
作用:建立多对一的关系
属性:
targetEntityClass:指定一的一方实体类字节码
cascade:指定要使用的级联操作
fetch:指定是否采用延迟加载
optional:关联是否可选。如果设置为false,则必须始终存在非空关系。

@JoinColumn
作用:用于定义主键字段和外键字段的对应关系。
属性:
name:指定外键字段的名称
referencedColumnName:指定引用主表的主键字段名称
unique:是否唯一。默认值不唯一
nullable:是否允许为空。默认值允许。
insertable:是否允许插入。默认值允许。
updatable:是否允许更新。默认值允许。
columnDefinition:列的定义信息。

cascade:配置级联操作CascadeType.MERGE  级联更新CascadeType.PERSIST 级联保存:CascadeType.REFRESH     级联刷新:CascadeType.REMOVE  级联删除:CascadeType.ALL     包含所有

删除从表数据:可以随时任意删除。

删除主表数据:

有从表数据
1、在默认情况下,它会把外键字段置为null,然后删除主表数据。如果在数据库的表结构上,外键字段有非空约束,默认情况就会报错了。
2、如果配置了放弃维护关联关系的权利,则不能删除(与外键字段是否允许为null,没有关系)因为在删除时,它根本不会去更新从表的外键字段了。
3、如果还想删除,使用级联删除引用

没有从表数据引用:随便删
在实际开发中,级联删除请慎用!(在一对多的情况下)

多对多注解说明

@ManyToMany
作用:用于映射多对多关系
属性:
cascade:配置级联操作。
fetch:配置是否采用延迟加载。
targetEntity:配置目标的实体类。映射多对多的时候不用写。

@JoinTable
作用:针对中间表的配置
属性:
name:配置中间表的名称
joinColumns:中间表的外键字段关联当前实体类所对应表的主键字段
inverseJoinColumn:中间表的外键字段关联对方表的主键字段

@JoinColumn
作用:用于定义主键字段和外键字段的对应关系。
属性:
name:指定外键字段的名称
referencedColumnName:指定引用主表的主键字段名称
unique:是否唯一。默认值不唯一
nullable:是否允许为空。默认值允许。
insertable:是否允许插入。默认值允许。
updatable:是否允许更新。默认值允许。
columnDefinition:列的定义信息。

在多对多(保存)中,如果双向都设置关系,意味着双方都维护中间表,都会往中间表插入数据,中间表的2个字段又作为联合主键,则会报错,主键重复,解决保存失败的问题:
只需要在任意一方放弃对中间表的维护权即可,推荐在被动的一方放弃,通过mappedby设置

删除操作
在多对多的删除时,双向级联删除根本不能配置
如果配了的话,如果数据之间有相互引用关系,可能会清空所有数据

fetch属性
FetchType.EAGER :立即加载 通常为多对一
FetchType.LAZY :延迟加载 通常为一对多

/**
* 学生表
**/
@Data
@Entity
@Table(name = "user_student")
public class UserStudentPo {@Id@GenericGenerator(name = "idGenerator", strategy = "uuid")@GeneratedValue(generator = "idGenerator")private String kid;private String studentName;private String classKid;@ManyToOne(targetEntity = ClassAdminPo.class,optional=false)@JoinColumn(name="classKid",referencedColumnName = "kid",insertable = false, updatable = false)private ClassAdminPo classAdminPo;
/**
* 班级表
*/
@Data
@Entity
@Table(name = "class_admin")
public class ClassAdminPo {@Id@GenericGenerator(name = "idGenerator", strategy = "uuid")@GeneratedValue(generator = "idGenerator")private String kid;private String className;private String classAddr;}
@Repository
public interface UserStudentDao extends JpaRepository<UserStudentPo, String>, JpaSpecificationExecutor<UserStudentPo> {}
@Service
public class UserAdminServiceImpl implements UserAdminService {@Autowiredprivate UserAdminDao userAdminDao;@Overridepublic List<UserAdminPo> findAll(String username) {return userAdminDao.findAll();}
}
@RestController
@RequestMapping("student")
public class UserAdminController {@Autowiredprivate UserAdminService userAdminService;@GetMappingpublic List<UserAdminPo> findAll(String username){return userAdminService.findAll(username);}
}

【jpa实现多表查询】相关推荐

  1. Spring Data JPA多表查询

    多表查询在Spring Data JPA中有两种实现方式 第一种创建一个结果集接口来接收多表连查的结果 第二种利用JPA的关联映射来实现 先来熟悉一下几个注解 注解 意思 属性 @ManyToOne ...

  2. jpa 跨表_JPA多表查询的解决办法

    实际业务中,多表关联查询应用实例很多,怎么使用JPA进行多表查询,可以选择不同的方法优化. 记下在JPA中多表查询的有效使用方法. 使用关系映射 就是使用一对多,多对一,一对一这种关系进行关联映射, ...

  3. Spring Hibernate JPA 联表查询 复杂查询

    (转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...

  4. 解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题)

    解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题) 参考文章: (1)解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题) (2)https: ...

  5. JPA 一对一设置无效,连表查询的时候另外一个实体类的对象值为空

    文章目录 1.前言 2.错误示例: 3.正确示例 4.讲解 1.前言 今天在使用 JPA 的时候发现了这样一个问题,User 表和 OrganInfo 表配置了一对一关系,连表查询的时候只能够查到表 ...

  6. JPA 多条件、多表查询

    JPA对于简单的查询操作确实很给力,但是涉及到多表.多条件.分页的场景就不是很好实现了. 可行的解决方案 1.多条件 public interface BaseRepository<T,ID e ...

  7. java sql 联表查询系统_Spring Hibernate JPA 联表查询 复杂查询(转)

    关系类型Owning-SideInverse-Side one-to-one @OneToOne @OneToOne(mappedBy="othersideName") one-t ...

  8. 基于JPA实现多表连接查询

    基于 JPA 显示城市信息 一.JPA JPA 定义 二.任务 实战 1.项目结构 2.项目配置信息 3.实体 4.映射 5.控制器 6.UI 三.效果图 一.JPA JPA 定义 Java 持久化 ...

  9. Spring Boot 学习总结之JPA【分页+自定义SQL+多表查询】

    目录 目录 Spring Data JPA简介 与mybatis对比 入手使用 (一)引入依赖 (二)添加配置文件: (四)实体类 (五)Repository: (六)使用: 自定义简单查询 复杂查询 ...

最新文章

  1. 腾讯面试题:创建索引时,你会怎么考虑呢?(看完你就能和面试官谈人生了)
  2. ubuntu phpinfo mysql_Ubuntu 16.04 apache+php+mysql环境搭建
  3. 利用Python实现简单的相似图片搜索的教程
  4. 更新整理本人所有博文中提供的代码与工具(Java,2013.11)
  5. 鸿蒙1号六年级下册课时练答案,【奥数天天练】小学1~6年级思维能力特训|第310期...
  6. TypeScript里的空值合并运算符(双问号)用法
  7. Buildroot构建指南--Overview
  8. Java构造函数可以私有,我们可以在Java中使用私有的构造函数吗?
  9. Knative 实战:基于阿里云 Kafka 实现消息推送
  10. windows 搜索文件
  11. OSPF中的次优外部路由——Forwarding Address
  12. Zephyr调整Main栈大小
  13. 关系抽取之远程监督算法:别再跟我提知识图谱(上篇)
  14. 2021-07-01数组和对象循环
  15. 通过Keytool 生成 Android 签名文件
  16. 基于Vue实现动态组织结构图
  17. easyui获取图片路径_Easyui filebox(文件框)_EasyUI 插件
  18. TasNet端到端模型
  19. mysql实现俩个属性加减运算_mysql加减乘除
  20. 使用WebRTC搭建前端视频聊天室-01——入门篇

热门文章

  1. 土壤湿度传感器的原理及驱动
  2. Python可迭代对象和迭代器对象详解
  3. Linux命令 - /etc/group文件详解
  4. html中选择器eq,jQuery 选择器之eq是什么意思
  5. MySQL中district,mysql SQL的应用
  6. java项目使用说明_java项目 BeanCopier使用说明
  7. 这个一个月没有更新的公众号的作者,他在支撑双十一
  8. html样式表控制表格,HTMLtable表格边框的控制详细说明表
  9. 小米oppo都在适配鸿蒙,针对华为鸿蒙系统,小米、OPPO相继表态,魅族的态度截然相反...
  10. 关于python内存管理下列说法中错误的是_2.关于Python内存管理,下列说法错误的是_学小易找答案...