/******************************************************************************* * Copyright (c) 2005, 2014 springside.github.io * * Licensed under the Apache License, Version 2.0 (the "License"); *******************************************************************************/ package com.lxz.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.MERGE) @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); } }
CascadeType.PERSIST会级联保存,所有对像都保存到数据库
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "user_id")
User user = new User();
user.setLoginName("persistTest");
user.setName("persistTest");
user.setPassword("111111");
user.setSalt("111111");
user.setRoles("aaa");
user.setRegisterDate(new Date());
Task t = new Task();
t.setTitle("persistTest");
t.setUser(user);
taskDao.save(t);
logger.debug("task id={}",t.getId());
logger.debug("user id={}",user.getId());
Hibernate:
insert
into
t_user
(id, login_name, name, password, register_date, roles, salt)
values
(null, ?, ?, ?, ?, ?, ?)
Hibernate:
insert
into
t_task
(id, description, title, user_id)
values
(null, ?, ?, ?)
15:29:16.091 [main] DEBUG com.lxz.repository.TaskDaoTest - task id=6
15:29:16.092 [main] DEBUG com.lxz.repository.TaskDaoTest - user id=3
如果改为CascadeType.MERGE,则会出错
@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "user_id")
User user = new User();
user.setLoginName("persistTest");
user.setName("persistTest");
user.setPassword("111111");
user.setSalt("111111");
user.setRoles("aaa");
user.setRegisterDate(new Date());
Task t = new Task();
t.setTitle("persistTest");
t.setUser(user);
taskDao.save(t);
logger.debug("task id={}",t.getId());
logger.debug("user id={}",user.getId());
Hibernate:
insert
into
t_task
(id, description, title, user_id)
values
(null, ?, ?, ?)
15:55:33.891 [main] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 23502, SQLState: 23502
15:55:33.893 [main] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - NULL not allowed for column "USER_ID"; SQL statement:
insert into t_task (id, description, title, user_id) values (null, ?, ?, ?) [23502-176]
发表评论
-
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 2670activeMQ默认的消息队列没有用户名和密码,可以直接通过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
相关推荐
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中,一对多关系通过@OneToMany和@ManyToOne注解定义,级联操作如CascadeType.PERSIST、CascadeType.REMOVE允许在操作父对象时自动处理子对象的状态。 **11. JPA中的一对多延迟加载与关系维护(一对多关系:二...
JPA提供了多种级联类型,如`CascadeType.PERSIST`、`CascadeType.MERGE`、`CascadeType.REMOVE`等。例如,如果设置为`CascadeType.ALL`,那么当保存一个班级实体时,它所关联的所有学生实体也会被自动保存;同样,...
- `CascadeType.PERSIST`: 当父实体被保存时,所有关联的子实体也将被保存。 - `CascadeType.MERGE`: 当父实体被更新时,所有关联的子实体也将被合并更新。 - `CascadeType.REMOVE`: 当父实体被删除时,所有关联...
例如,`@OneToMany`和`@ManyToOne`用于表示一对多或多对一的关系,级联操作如`CascadeType.PERSIST`、`CascadeType.MERGE`等可以确保当一个实体被保存或更新时,与其关联的实体也会相应更新。这在处理关联数据时非常...
3. ** Cascade操作**:`@ManyToMany`支持级联操作,如`CascadeType.PERSIST`、`CascadeType.MERGE`等,这使得在保存或更新主侧实体时,关联的次侧实体也会相应处理。 4. **Fetch策略**:默认情况下,JPA使用懒加载...
级联操作不仅可以应用于删除,还可以应用于其他操作,如`PERSIST`(保存)、`MERGE`(合并)、`REFRESH`(刷新)和`DETACH`(分离)。选择哪种级联类型取决于业务需求,需要注意的是过度使用级联可能会导致不必要的...
实体Bean之间的级联关系是Java持久化框架如Hibernate或JPA中的一个重要概念,它涉及到对象关系映射(ORM)中的数据操作同步性。在数据库中,实体Bean通常代表表中的行,而实体间的级联关系则反映了表之间的关联。...
常见的级联类型有:`CascadeType.ALL`、`CascadeType.PERSIST`、`CascadeType.MERGE`等。 6. **HQL与Criteria查询** HQL是Hibernate特有的面向对象的查询语言,类似于SQL,但更接近Java语法。Criteria查询则是通过...
JPA的`CascadeType`可以设置为不同的值,比如`PERSIST`, `MERGE`, `REMOVE`等,以控制关联实体的生命周期。例如,如果希望当删除学生时,自动删除所有关联的课程,可以在`@ManyToMany`上添加`cascade = CascadeType....
- 要保存或更新Employee,我们可以直接调用`EntityManager`的`persist()`或`merge()`方法,JPA会处理外键的设置。 - 读取Employee时,可以直接访问`department`属性获取对应的Department实例。 4. **懒加载与即时...
entityManager.persist(parent); ``` 四、优点与注意事项 一对一双向关联可以方便地从两个实体的任何一方访问对方,简化了代码。然而,它也增加了数据冗余和维护复杂性,因为每个实体都需要维护对另一方的引用。在...
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST}) @JoinColumn(name = "dept_id") private Dept dept; } ``` 在这个例子中,`User`类与`Dept`类之间建立了多对一的关系。通过`@ManyToOne`...
JPA支持懒加载和级联操作,比如在上述用户和订单的例子中,可以通过设置`mappedBy`属性实现懒加载,而级联操作如`CascadeType.ALL`可以在操作用户时同时处理关联的订单。 9. **实体状态管理** JPA定义了四种实体...
- 使用`cascade`属性,可以配置级联操作,如`CascadeType.PERSIST`会使得在保存用户时同时保存所有关联的订单。 6. **集合类型的选择**: - `OneToMany`关系通常与`List`, `Set`等集合类型一起使用。选择哪种类型...
cascade 属性用于配置级联操作,包括 ALL、PERSIST、MERGE、REMOVE 和 REFRESH 等取值。根据需求选择合适的级联操作。 在 School 和 Address 中,我们可以使用 @OneToOne(cascade = CascadeType.ALL) 来维护一对一...
@OneToMany(mappedBy = "department", cascade = CascadeType.ALL) private List<Employee> employees; // getters and setters } ``` Employee.java ```java @Entity public class Employee { @Id @...