本篇文章帮大家学习JPA级联删除,包含了JPA级联删除使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。

级联移除用于指定如果父实体被移除,则其所有相关实体也将被移除。 以下语法用于执行级联删除操作 -

@OneToOne(cascade=CascadeType.REMOVE)

JPA级联删除示例

在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。

这个例子包含以下步骤 -

第1步: 在com.yiibai.jpa.student包下创建一个名为StudentEntity.java的实体类,其中包含属性:s_id,s_name,s_age以及标记为级联规范的Subject类型的对象。

文件: StudentEntity.java -

package com.yiibai.jpa.student;

import javax.persistence.*;

import com.yiibai.jpa.subject.Subject;

@Entity

@Table(name = "student")

public class StudentEntity {

@Id

private int s_id;

private String s_name;

private int s_age;

@OneToOne(cascade = { CascadeType.REMOVE })

private Subject sub;

public Subject getSub() {

return sub;

}

public void setSub(Subject sub) {

this.sub = sub;

}

public StudentEntity(int s_id, String s_name, int s_age, Subject sub) {

super();

this.s_id = s_id;

this.s_name = s_name;

this.s_age = s_age;

this.sub = sub;

}

public StudentEntity() {

super();

}

public int getS_id() {

return s_id;

}

public void setS_id(int s_id) {

this.s_id = s_id;

}

public String getS_name() {

return s_name;

}

public void setS_name(String s_name) {

this.s_name = s_name;

}

public int getS_age() {

return s_age;

}

public void setS_age(int s_age) {

this.s_age = s_age;

}

}

第2步: 在com.yiibai.jpa.subject包下创建另一个名为Subject.java的实体类。

文件:Subject.java -

package com.yiibai.jpa.subject;

import javax.persistence.*;

@Entity

@Table(name = "subject")

public class Subject {

private String name;

private int marks;

@Id

private int s_id;

public Subject(String name, int marks, int s_id) {

super();

this.name = name;

this.marks = marks;

this.s_id = s_id;

}

public Subject() {

super();

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getMarks() {

return marks;

}

public void setMarks(int marks) {

this.marks = marks;

}

public int getS_id() {

return s_id;

}

public void setS_id(int s_id) {

this.s_id = s_id;

}

}

现在,将实体类和其他数据库配置映射到persistence.xml文件中。

文件:persistence.xml -

xmlns="http://xmlns.jcp.org/xml/ns/persistence"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

com.yiibai.jpa.student.StudentEntity

com.yiibai.jpa.subject.Subject

value="com.mysql.jdbc.Driver" />

value="jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC" />

value="123456" />

value="create-or-extend-tables" />

在com.yiibai.jpa.cascade包下创建一个名为StudentCascade.java的持久化类,以便将实体对象与数据保持一致。

文件:StudentCascade.java -

package com.yiibai.jpa.cascade;

import javax.persistence.*;

import com.yiibai.jpa.student.*;

public class StudentCascade {

public static void main(String[] args) {

EntityManagerFactory emf = Persistence.createEntityManagerFactory("Student_details");

EntityManager em = emf.createEntityManager();

em.getTransaction().begin();

StudentEntity s = em.find(StudentEntity.class, 101);

em.remove(s);

em.getTransaction().commit();

em.close();

emf.close();

}

}

注 - student表中的主键(即s_id)将作为subject表中的外键处理,以维持两个表之间的关系。

输出结果

程序执行完毕后,在MySQL工作台下生成以下表格。

student表 - 要获取数据,在MySQL中运行select * from student。得到结果如下 - mysql> select * from student;

+------+-------+--------+----------+

| S_ID | S_AGE | S_NAME | SUB_S_ID |

+------+-------+--------+----------+

| 102 | 22 | James | 102 |

+------+-------+--------+----------+

1 rows in set

subject表 - 要获取数据,在MySQL中运行select * from subject。得到结果如下 - mysql> select * from subject ;

+------+-------+---------+

| S_ID | MARKS | NAME |

+------+-------+---------+

| 102 | 75 | Maths |

+------+-------+---------+

1 rows in set

java 级联删除_JPA级联删除相关推荐

  1. jpa级联添加_jpa级联(Cascade)操作

    由于 重复性的操作十分烦琐,尤其是在处理多个彼此关联对象情况下,此时我们可以使用级联(Cascade)操作.级联 在关联映射中是个重要的概念,指当主动方对象执行操作时,被关联对象(被动方)是否同步执行 ...

  2. java 级联删除_Mybatis 级联删除的实现

    需求描述 今日需求是删除资源时同时删除与该资源绑定的角色数据,有两张表,资源表.角色与资源绑定表,级联删除的时候有两种方法:①建立表时直接建立约束,当父表删除数据时数据库会自动去删除子表中的数据,②通 ...

  3. oracle 允许级联删除,oracle系列--级联删除和级联更新

    鉴于此前收藏的精彩博客无料被删除了,很是痛心,所以还是要复制一下 一.级联删除 Oracle在外键的删除上有NO ACTION(类似RESTRICT).CASCADE和SET NULL三种行为. 下面 ...

  4. 数据库级联操作mysql_Oracle数据库中的级联查询、级联删除、级联更新操作教程...

    级联查询在ORACLE 数据库中有一种方法可以实现级联查询 select * //要查询的字段 from table //具有子接点ID与父接点ID的表 start with selfid=id // ...

  5. [NHibernate]一对多关系(级联删除,级联添加)

    目录 写在前面 文档与系列文章 一对多关系 一个例子 级联删除 级联保存 总结 写在前面 在前面的文章中,我们只使用了一个Customer类进行举例,而在客户.订单.产品中它们的关系,咱们并没有涉及, ...

  6. mysql级联更新_Mysql实现级联操作(级联更新、级联删除)(转)

    一.首先创建两张表stu,sc create table stu( sid int UNSIGNED primary key auto_increment, name varchar(20) not ...

  7. mysql数据库教程级联_Mysql实现级联操作(级联更新、级联删除)

    tablestu( sidint UNSIGNED primary keyauto_increment, namevarchar(20) not null) TYPE=InnoDB charset=u ...

  8. Oracle数据库中的级联查询、级联删除、级联更新操作教程

    这里整理了Oracle中的三种级联操作,其中Oracle定义外健的时候可以定义级联删除,但是没有级联修改的语法,当然可以用触发器实现,下面我们详细来看Oracle数据库中的级联查询.级联删除.级联更新 ...

  9. sql级联更新和级联删除

    title: sql级联更新和级联删除 date: 2019-05-27 23:15:29 tags: [SQL, Mysql] sql级联更新 执行更新book表失败 后来查找原因是book表被bo ...

最新文章

  1. java异常分析;剖析printStackTrace和fillInStackTrace
  2. 很幽默的讲解六种Socket IO模型
  3. 洛谷——P2083 找人
  4. 【个人成长学习讨论小组】练习2:角色
  5. Java 中如何模拟真正的同时并发请求?
  6. 汇编语言布尔和比较指令简介
  7. 线程----Monitor(互斥锁)类设置超时值
  8. 数字三角形的显示 java
  9. 开机自启动redis
  10. 深度好文,如何培养真正的数据分析思维?附实践案例
  11. 《Spring技术内幕》——1.2节Spring的设计目标
  12. oracle将列名进行拼接,请教关于用拼接的字符串作为表的列名进行操作的问题
  13. 防毒墙APT防护抗DDOS攻击
  14. html页面到服务器上乱码,网页乱码问题
  15. 计算机基础知识(上)(硬件篇)
  16. 360路由器v2刷第三方固件_路由器刷固件图文教程,刷机OpenWrt第三方固件,路由器升级固件...
  17. 计算机专硕怎么规划未来?
  18. golang 单元测试进阶篇
  19. linux ubuntu 22.04卸载firefox火狐浏览器正确方式
  20. 输入一段英文字符,统计每个小写字母的出现次数

热门文章

  1. 乾颐堂安德华为数通HCNA真题解析版(第2部分)
  2. 通过 Dockerfile 搭建标注工具 brat 的镜像
  3. 0成本截流的三种方法,挣钱从引流开始
  4. 【UE·蓝图底层篇】一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass
  5. html标记语言格式,标记语言——打印样式
  6. 祝所有的程序猿春节愉快,好好休息
  7. win10 cuda13 pytorch pycharm
  8. openstack compute service list报错(HTTP 503)
  9. Blurring the Lines between Blockchains andDatabase Systems: the Case of Hyperledger Fabric(翻译)
  10. Spring cloud网关gateway代理websocket报Max frame length of 65536 has been exceeded