/******************************************************************************* * 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 726引用 使用 Antlr 处理文本 https://www.ib ... -
解决maven-metadata.xml文件下载卡死问题
2019-04-11 14:02 3752http://192.168.1.110:8081/nexus ... -
rsync备份和删除指定文件
2018-01-02 10:23 1974文件异地备份时,需要将本地文件合并到服务器上,且不能删除服务器 ... -
javaLocale格式化日期和数字
2017-08-25 09:26 814public static void main(Strin ... -
centos6 tomcat 启动脚本 tomcat服务
2017-08-23 11:24 1372系统自动启动tomcat 复制该脚本到/etc/init.d/ ... -
win7 命令行改IP和DNS
2016-12-21 18:35 655使用管理员权限运行CMD //改DNS netsh ... -
jenkins中集成sonar,使用findbug、pmd、checkstyle提升代码质量
2016-09-29 14:58 6075实际上jenkins单独也 ... -
jenkins 集成sonar
2016-09-18 10:14 0jenkins集成sonar可以从插件中心直接更新安装 son ... -
activeMQ5.14权限配置
2016-08-17 13:47 2607activeMQ默认的消息队列没有用户名和密码,可以直接通过T ... -
solaris 使用解压版的jdk
2016-07-27 15:17 708solaris上配置jdk其实也很简单 由于solaris有 ... -
solaris tomcat开机启动
2016-07-27 16:17 563创建文件夹/var/svc/manifes ... -
HibernateTemplate Vs HibernateDaoSupport Vs Direct Hibernate Access
2016-07-26 11:07 676http://forum.spring.io/forum/sp ... -
spring mvc mybatis will not be managed by Spring
2016-07-20 17:30 9632项目运行时发现事务提交不完整,回滚时只能回滚一半。 系统配置 ... -
java里判断一点是否在某个区域
2016-06-03 17:47 1670import java.awt.geom.Path2D ... -
12306的技术升级
2016-04-20 16:17 986升级的核心是余票查询的升级,余票查询使用存储过程,sybase ... -
工作流的123
2016-04-20 12:58 540三分钟了解Activity工作流 工作流一般会给开发人员提供流 ... -
sping mvc 使用@Value注解为controller注入值
2016-04-17 17:39 10779spring mvc 里有两个配置文件, 第一个,为sprin ... -
googleapis.com域名访问慢的解决办法
2016-04-13 12:09 8861、安装火狐 2、安装插件ReplaceGoogleCDN
相关推荐
很奇怪),分别是CascadeType.PERSIST(级联新建),CascadeType.REMOVE(级联删除),CascadeType.REFRESH(级联刷新),CascadeType.MERGE(级联更新),CascadeType.ALL(全部四项) * 方法一 * 主表: ?@OneToOne...
Hibernate注释大全收藏 声明实体Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id) { this.id = id;...
@OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE }) @JoinColumn(name= "airplane_fk") private Airplane airplaneDetail; 现在,这可以使排期列表自动更新。 这也意味着,如果将飞行员添加到...
本文介绍自己最近做省市级联的类似的级联功能的实现思路,为了尽...CascadeType. PERSIST 级联持久化 ( 保存 ) 操作 CascadeType. MERGE 级联更新 ( 合并 ) 操作 CascadeType. REFRESH 级联刷新操作,只会查询获取操作
在前面的例子中,我们演示了一对多和多对一的例子,在本章将演示多对多和一对一的关系。... 如: @ManyToMany(cascade = {CascadeType.CREATE, CascadeType.MERGE}, fetch = FetchType.EAGER, isInverse
hibernate的_CascadeType属性说明
@ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY) @JoinColumn(name = "personid", unique = false, nullable = true, insertable = true, updatable = true) public Person getPerson() { ...
javax.persistence.CascadeType.class javax.persistence.CollectionTable.class javax.persistence.Column.class javax.persistence.ColumnResult.class javax.persistence.criteria.AbstractQuery.class javax....
cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "employees" targetEntity = Employer.class ) public Collection<Employer> getEmployers() { return employers; } .. .. } @JoinTable批注...
详解Hibernate cascade级联属性的CascadeType的用法 cascade(级联) 级联在编写触发器时经常用到,触发器的作用是当 主控表信息改变时,用来保证其关联表中数据同步更新。若对触发器来修改或删除关联表相记录,必须...