• 1 一对多案例(部门与员工)

    • 1.1 实体类注解
    • 1.2 级联添加、级联更新与级联删除
  • 2 多对多案例(学生与教师)
    • 2.1 实体类注解
    • 2.2 级联添加、级联删除与级联更新
  • 3 多表查询
  • 资源下载

更多JPA在框架开发


1 一对多案例(部门与员工)

1.1 实体类注解

package edu.kmust.entity;
import java.util.HashSet;
import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/*** 部门实体类* @author zhaoyuqiang**/
@Entity
@Table(name="tb_depart")
public class Depart {@Id@Column(name="depart_id")@GeneratedValue(strategy=GenerationType.IDENTITY)private Long departId ;@Column(name="depart_name")private String departName ;/** 一对多的配置 *     targetEntity可以省略*     mappedBy代表放弃对外键的维护,其值是Staff实体类中的部门属性*     cascade : 级联操作*     fetch: 查询方式,不写默认延迟加载*         lazy: 延迟加载*         eager:立即加载*/@OneToMany(targetEntity=Staff.class,mappedBy="depart",cascade=CascadeType.ALL)private Set<Staff> staffs = new HashSet<Staff>();// 此处省略getter和setter方法
}
package edu.kmust.entity;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
/*** 员工实体类* @author zhaoyuqiang**/
@Entity
@Table(name="tb_staff")
public class Staff {@Id@Column(name="staff_id")@GeneratedValue(strategy=GenerationType.IDENTITY)private Long staffId ;@Column(name="staff_name")private String staffName ;/** 多对一的配置*      cascade : 级联操作,ALL表示级联添加、级联删除、级联更新等等*      fetch: 查询方式 ,不写默认延迟加载*         lazy: 延迟加载*         eager:立即加载*/@ManyToOne(targetEntity=Depart.class,cascade=CascadeType.ALL,fetch=FetchType.EAGER)/** 维护外键*    JoinColumn :添加外键*       name : 外键名字*       referencedColumnName : 外键关联的表的主键*/@JoinColumn(name="foreign_departId",referencedColumnName="depart_id")private Depart depart ;// 此处省略getter和setter方法}

1.2 级联添加、级联更新与级联删除

级联添加:

Staff staf =  new Staff();
staf.setStaffName("于鲲");
Depart dept = new Depart();
dept.setDepartName("220实验室");
staf.setDepart(dept);
dept.getStaffs().add(staf);
em.persist(dept);   

级联更新:

/*** 级联更新 *    将某一员工从220实验室移动到110实验室*/
Depart  dept = em.find(Depart.class, 1L);
Staff staf = em.find(Staff.class, 3L);
dept.getStaffs().add(staf);
staf.setDepart(dept);

级联删除:(小心,最好不用)

/*** 级联删除*   删除部门的同时,删除该部门下的所有联系人*/
Depart dept = em.find(Depart.class, 3L);
em.remove(dept);

2 多对多案例(学生与教师)

2.1 实体类注解

package edu.kmust.entity;import java.util.HashSet;
import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="tb_teacher")
public class Teacher {@Id@Column(name="tea_id")@GenericGenerator(name="uuid",strategy="uuid") @GeneratedValue(generator="uuid")private String teaId ;@Column(name="tea_name")private String teaName ;/** 放弃第三张表的维护*    targetEntity : 可以省略*    fetch: 查询方式,不写默认延迟加载*         lazy: 延迟加载*         eager:立即加载*/@ManyToMany(targetEntity=Student.class,mappedBy="teachers",cascade=CascadeType.ALL)private Set<Student> students = new HashSet<Student>();//此处省略getter和setter
}
package edu.kmust.entity;import java.util.HashSet;
import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="tb_student")
public class Student {@Id@Column(name="stu_id")@GenericGenerator(name="uuid",strategy="uuid")@GeneratedValue(generator="uuid")private String stuId ;@Column(name="stu_name")private String stuName ;/** 建立多对多的联系*   fetch: 查询方式,不写默认延迟加载*         lazy: 延迟加载*         eager:立即加载*/@ManyToMany(targetEntity=Teacher.class,cascade=CascadeType.ALL)/** 需要维护中间表,需要用JoinTable创建中间表*   JoinTable:创建中间表*      name:中间表的表名*      joinColumns:*          name : 当前实体类在中间表中的外键名字*          referencedColumnName : 关联的表的主键字段名*      inverseJoinColumns: 另一个实体类*          name : 另一个实体类在中间表中的外键名字*          referencedColumnName :  关联的表的主键字段名*/@JoinTable(name="tb_student_teacher",joinColumns= {@JoinColumn(name="foreign_student_id",referencedColumnName="stu_id")},inverseJoinColumns= {@JoinColumn(name="foreign_teacher_id",referencedColumnName="tea_id")})private Set<Teacher> teachers = new HashSet<Teacher>();//此处省略getter和setter方法
}

2.2 级联添加、级联删除与级联更新

级联添加:

Student stu = new Student();
Student stu1 = new Student();
stu.setStuName("张大科");
stu1.setStuName("赵玉强");
Teacher tea = new Teacher();
Teacher tea1 = new Teacher();
tea1.setTeaName("常璐璐");
tea.setTeaName("钱谦");
stu.getTeachers().add(tea);
stu1.getTeachers().add(tea);
stu1.getTeachers().add(tea1);
tea.getStudents().add(stu1);
tea.getStudents().add(stu);
tea1.getStudents().add(stu1);
em.persist(stu);

级联更新 :类似一对多,不再演示。

级联删除:(绝对禁止使用) , 不再演示。

3 多表查询

/*** 1.对象图导航*   默认是延迟查询*     如果需要更改,需要对应实体类的配置多对一或者一对多或者多对多标签中加入*       */
Depart dept = em.find(Depart.class, 1L) ;
Set<Staff> stafList = dept.getStaffs();
for(Staff staf : stafList) {
System.out.println(staf.getStaffName());        

其他查询类似一对多,多表中的特殊查询类似Hibernate中的多表查询。不再演示。

资源下载

JPA学习代码下载:
https://download.csdn.net/download/g425680992/10484800

Hibernate学习代码下载:
https://download.csdn.net/download/g425680992/10484797

JPA开发(下)一(多)对多的配置与crud操作相关推荐

  1. Android Studio开发(四)SQLite数据库的DAO标准CRUD操作模拟微信通讯录

    Android Studio开发(四)SQLite数据库的DAO标准CRUD操作模拟微信通讯录 Android Studio开发(四)SQLite数据库的DAO标准CRUD操作模拟微信通讯录 一.任务 ...

  2. RHEL 4 下 ISCSI Enterprise Target 的常用配置和常用操作

    这里都是关于 使用 ISCSI Enterprise Target(简称IET) 的使用说明. 常用操作命令:     查看当前虚拟单元清单.     cat /proc/net/iet/volume ...

  3. EclipseLink+H2 快速搭建JPA开发环境

    JPA是Java Persistence API, 是Java提供的持久层开发的统一API.但是JPA只是定义的规范接口,并没有提供具体实现, JPA的具体实现有Hibernate .EclipseL ...

  4. DARPA宣布未来五年将投资20亿美元开发下一波人工智能技术

    来源:国防科技信息网 作者:丁宏 中国船舶工业综合技术经济研究院 美国DARPA近日宣布,计划在未来5年内投资20亿美元用于开发下一波人工智能技术,寻求情境推理能力等技术的突破,使其有能力识别新的场景 ...

  5. [Linux]在Linux上部署Java开发环境笔记(一)-- 补充:Linux下如何手动设置IP及配置DNS服务

    在Linux上部署Java开发环境笔记(一) -- 补充:Linux下如何手动设置IP及配置DNS服务 2010/06/17 有的Linux系统会有网络设置的图形操作界面,比如"红旗Linu ...

  6. 使用eclipse安装python插件_在windows下用eclipse + pydev插件来配置python的开发环境

    在windows下用eclipse + pydev插件来配置python的开发环境 一.安装 python 可以到网上下个Windows版的python,官网为:https://www.python. ...

  7. 盘点Win前端开发下常用的软件

    盘点Win开发下常用的软件(前端) 本人在使用的一些软件 实用工具 Quicker:快捷方式 截图并贴图 长按鼠标右键打开快捷方式 f.lux:护眼 https://justgetflux.com/ ...

  8. 视频教程-丑小鸭历险记——趣味玩转unity2d游戏开发(下)-Unity3D

    丑小鸭历险记--趣味玩转unity2d游戏开发(下) 从业8年以上,学过一点知识,写过一点代码,擅长计算机图形学,擅长unity3d,擅长将抽象的东西讲明白,写看得懂的代码,讲听得懂的课程,不闲聊,不 ...

  9. 【Java开发语言 00】环境搭建(配置java环境+‘javac’不是内部或外部命令,也不是可运行的程序+安装idea+idea基本用法+新建项目+在新项目的src路径下新建包和类+基础调试+路径)

    idea入门 1 idea安装 1.1 官方下载地址 2 Java语言环境的搭建 下载JDK 安装 JDK(安装路径不要有中文或者特殊符号如空格等) 配置环境变量(必须是全英文状态下的字符) clas ...

最新文章

  1. Win7下U盘安装Ubuntu14.04双系统
  2. PHP 一键安装扩展的程序-(Windows 系统)
  3. Eclipse导入项目常见问题----facet版本问题04
  4. 2020年什么名字最受欢迎?前面“奕辰”你别走
  5. 【飞秋教程】文字表情图片对话
  6. 对于公司来说,企业内训是否真的有必要?
  7. 在Windows上build Spark
  8. 团队项目改进与详细设计
  9. (day 44 - 滑动窗口 ) 剑指 Offer 53 - II. 0~n-1中缺失的数字
  10. java deadlock oracle_【DEADLOCK】Oracle“死锁”模拟
  11. python基础-craps赌牌游戏
  12. 电脑正常登录QQ微信,但浏览器无法打开网页,这个你一定要学会!
  13. Code、 RO-data=、 RW-data、ZI-data、
  14. 使用POI创建Excel无法打开
  15. Python爬虫实战使用scrapy与selenium来爬取数据
  16. asp毕业设计——基于asp+access的网上选题系统设计与实现(毕业论文+程序源码)——网上选题系统
  17. C语言下划线开头的函数
  18. 到处都是“公馆”,中国小区命名为何如此“没文化”?
  19. 巧用第三方快速开发Android App 热门第三方SDK及框架
  20. 利用轮播图制作简单游戏页面

热门文章

  1. python支持保护类型_1.7. 保护、继承、多态
  2. SQL语句大全 作者:阿多
  3. 映像劫持病毒有什么现象及清除步骤
  4. 【论文阅读笔记|ACL2022】Continual Sequence Generation with Adaptive Compositional Modules
  5. 微信小程序--开发者工具
  6. 惠普惠特曼:联想收买IBM效劳器将令惠普获益
  7. Electron+Vue的开发经验
  8. DELPHI的BPL使用
  9. MySQL用年、月、日、季度、周分别统计数据
  10. shineblink APDS-9960传感器感应手势