/******************************************************************************* * Copyright (c) 2005, 2014 springside.github.io * * Licensed under the Apache License, Version 2.0 (the "License"); *******************************************************************************/ package com.entity; import javax.persistence.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.hibernate.validator.constraints.NotBlank; //JPA标识 @Entity @Table(name = "t_task") public class Task extends IdEntity { private String title; private String description; private User user; // JSR303 BeanValidator的校验规则 @NotBlank public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } // JPA 基于USER_ID列的多对一关系定义 @ManyToOne(cascade = CascadeType.REMOVE) @JoinColumn(name = "user_id") public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }
@Test public void remove(){ Task task = taskDao.findOne(1L); long userId = task.getUser().getId(); //删除task时,user也被删除 taskDao.delete(task); User user = userDao.findOne(userId); logger.debug("user is {}",user); }
16:45:51.071 [main] DEBUG com.repository.TaskDaoTest - user is null
如果反过来,删除User对象,User对象上并未绑定任何关联关系
User user = userDao.findOne(2L); //删除user userDao.delete(user); //加载关联的task Task task = taskDao.findOne(1L); //重新加载user user = userDao.findOne(2L); logger.debug("task is {}",task); logger.debug("task.user is {}",task.getUser()); logger.debug("user is {}",user);
结果是只删除了user对象 task对象未删除,task关联的user对象在事务未结束时还可以访问
16:54:00.962 [main] DEBUG com.repository.TaskDaoTest - task is com.entity.Task@2a79db08[title=Study PlayFramework 2.0,description=http://www.playframework.org/,user=com.entity.User@367970fa[loginName=user,name=Calvin,plainPassword=<null>,password=2488aa0c31c624687bd9928e0a5d29e7d1ed520b,salt=6d65d24122c30500,roles=user,registerDate=2012-06-04 02:00:00.0,id=2],id=1]
17:09:56.307 [main] DEBUG com.repository.TaskDaoTest - task.user is com.entity.User@c734212[loginName=user,name=Calvin,plainPassword=<null>
16:54:00.973 [main] DEBUG com.repository.TaskDaoTest - user is null
若改为 CascadeType.PERSIST 则未级联删除 输出
16:47:08.936 [main] DEBUG com.repository.TaskDaoTest - user is com.entity.User@3ef6551c[loginName=user,name=Calvin,plainPassword=<null>,password=2488aa0c31c624687bd9928e0a5d29e7d1ed520b,salt=6d65d24122c30500,roles=user,registerDate=2012-06-04 02:00:00.0,id=2]
发表评论
-
charles4.2下载与破解方法以及配置https
2020-02-26 09:03 2有两个抓包工具 一个是fidder,一个是charles,两个 ... -
序列号批量生成算法
2019-12-05 14:11 0业务处理过程当中,经常需要生成订单号、序列号等,简单的可 ... -
使用ANTLR处理文本
2019-08-28 17:32 764引用 使用 Antlr 处理文本 https://www.ib ... -
解决maven-metadata.xml文件下载卡死问题
2019-04-11 14:02 3976http://192.168.1.110:8081/nexus ... -
rsync备份和删除指定文件
2018-01-02 10:23 2044文件异地备份时,需要将本地文件合并到服务器上,且不能删除服务器 ... -
javaLocale格式化日期和数字
2017-08-25 09:26 865public static void main(Strin ... -
centos6 tomcat 启动脚本 tomcat服务
2017-08-23 11:24 1438系统自动启动tomcat 复制该脚本到/etc/init.d/ ... -
win7 命令行改IP和DNS
2016-12-21 18:35 732使用管理员权限运行CMD //改DNS netsh ... -
jenkins中集成sonar,使用findbug、pmd、checkstyle提升代码质量
2016-09-29 14:58 6167实际上jenkins单独也 ... -
jenkins 集成sonar
2016-09-18 10:14 0jenkins集成sonar可以从插件中心直接更新安装 son ... -
activeMQ5.14权限配置
2016-08-17 13:47 2669activeMQ默认的消息队列没有用户名和密码,可以直接通过T ... -
solaris 使用解压版的jdk
2016-07-27 15:17 762solaris上配置jdk其实也很简单 由于solaris有 ... -
solaris tomcat开机启动
2016-07-27 16:17 618创建文件夹/var/svc/manifes ... -
HibernateTemplate Vs HibernateDaoSupport Vs Direct Hibernate Access
2016-07-26 11:07 732http://forum.spring.io/forum/sp ... -
spring mvc mybatis will not be managed by Spring
2016-07-20 17:30 9876项目运行时发现事务提交不完整,回滚时只能回滚一半。 系统配置 ... -
java里判断一点是否在某个区域
2016-06-03 17:47 1830import java.awt.geom.Path2D ... -
12306的技术升级
2016-04-20 16:17 1027升级的核心是余票查询的升级,余票查询使用存储过程,sybase ... -
工作流的123
2016-04-20 12:58 571三分钟了解Activity工作流 工作流一般会给开发人员提供流 ... -
sping mvc 使用@Value注解为controller注入值
2016-04-17 17:39 10831spring mvc 里有两个配置文件, 第一个,为sprin ... -
googleapis.com域名访问慢的解决办法
2016-04-13 12:09 9681、安装火狐 2、安装插件ReplaceGoogleCDN
相关推荐
CascadeType是hibernate中的枚举类型,定义了多种级联操作,包括REFRESH、PERSIST、REMOVE、MERGE、ALL等。 CascadeType.REFRESH: 级联刷新是指当多个用户同时操作一个实体时,为了确保用户获取的数据是实时的。...
例如,当我们删除一个实体时,如果设置为`CascadeType.ALL`或`CascadeType.REMOVE`,那么其对应的实体也会被删除。同时,`CascadeType.PERSIST`和`CascadeType.MERGE`则会在保存或更新主体对象时处理相关联的对象。 ...
如果我们希望在删除`School`实体时,自动删除其所有关联的`Student`,可以设置`cascade=CascadeType.REMOVE`。这样,在调用`session.delete(school)`时,所有在`studentSet`中的学生也将被删除。 ### 总结 `...
当设置为`CascadeType.REMOVE`时,如果删除了父实体,与之关联的子实体也会被删除。这在处理一对多或者多对多关系时非常有用,可以确保相关的数据在数据库中得到一致性的清理。但是,需要注意的是,这种操作可能导致...
- 例如,如果我们希望在删除父类实体时,也删除所有子类实体,可以这样设置:`cascade = CascadeType.REMOVE`。 3. **使用级联操作** - 当我们通过Hibernate的Session对象保存或更新父类实体时,配置了级联操作的...
4. `CascadeType.REMOVE`:删除关联的对象。 5. `CascadeType.ALL`:包含所有上述操作。 在实际使用中,需谨慎处理级联操作,避免不必要的数据丢失或错误。 **五、实战演练** 在“hibernate1013”项目中,你可以...
3. **CascadeType.REMOVE**: 删除操作会删除关联的对象。 4. **CascadeType.ALL**: 包含以上所有操作。 5. **CascadeType.PERSIST**: 仅在持久化操作时影响关联对象。 ### 示例源程序 在`hsl`文件中,我们可以找到...
根据实际需求,可以选择其他级联类型,如`CascadeType.PERSIST`仅在保存时级联,`CascadeType.REMOVE`仅在删除时级联等。 五、实际应用与注意事项 在实际开发中,一对一关联常用于两个紧密相关的实体,如用户与用户...
当删除一个实体(`remove()`)时,如果该实体与其他实体有关联,并且使用了`CascadeType.REMOVE`,Hibernate会递归地删除所有关联的实体。这样可以确保在删除主对象时,与其相关联的对象也一同被删除,避免了数据不...
例如,如果级联类型包括了`CascadeType.REMOVE`,那么删除一个用户将连同其所有帖子一起被删除,这可能不是我们期望的结果。 此外,为了优化性能,通常会配合使用`FetchType.LAZY`或`FetchType.EAGER`来控制关联的...
JPA提供了一系列的级联类型,如`CascadeType.PERSIST`、`CascadeType.MERGE`、`CascadeType.REMOVE`等。例如,如果我们设置了`CascadeType.ALL`,当保存或删除一个`Student`时,JPA会自动保存或删除所有相关的`...
@OneToMany(mappedBy = "parent", cascade = {CascadeType.PERSIST, CascadeType.REMOVE}) private List<ChildEntity> children; } @Entity public class ChildEntity { @Id @GeneratedValue(strategy = ...
JPA提供了多种级联类型,如`CascadeType.PERSIST`、`CascadeType.MERGE`、`CascadeType.REMOVE`等。例如,如果设置为`CascadeType.ALL`,那么当保存一个班级实体时,它所关联的所有学生实体也会被自动保存;同样,...
2. **级联类型**:Hibernate提供了多种级联类型,如`CascadeType.SAVE_UPDATE`、`CascadeType.REMOVE`等。在上述例子中,`CascadeType.ALL`意味着保存、更新和删除操作都会影响到关联的对象。 3. **级联操作的顺序*...
@Cascade(value={org.hibernate.annotations.CascadeType.MERGE, org.hibernate.annotations.CascadeType.PERSIST, org.hibernate.annotations.CascadeType.REFRESH, org.hibernate.annotations.CascadeType.REMOVE}...
例如,`CascadeType.PERSIST`会将关联对象一起保存,`CascadeType.REMOVE`会在删除主体对象时删除关联对象等。`CascadeType.ALL`则表示所有操作都会级联。 9. **mappedBy**: `mappedBy`在双向一对多或多对一关系...
- `CascadeType.REMOVE`: 当父实体被删除时,所有关联的子实体也将被删除。 - `CascadeType.REFRESH`: 当父实体被刷新时,所有关联的子实体也将被刷新。 - `CascadeType.ALL`: 同时执行上述所有操作。 #### 二、...
若希望在删除一个实体时同时删除其关联实体,可以使用`CascadeType.REMOVE`。 需要注意的是,级联操作需要谨慎使用,因为过度的级联可能导致不必要的数据库操作,影响性能。此外,如果不正确地设置级联,可能会意外...
常用的级联类型包括`CascadeType.SAVE_UPDATE`(保存或更新关联实体)、`CascadeType.PERSIST`(持久化新实体)和`CascadeType.REMOVE`(删除关联实体)。通过在实体关系映射的注解中指定这些级联类型,可以实现数据...