springData表关系:一对一
一、编写两个实体类
1、一对一关系实现:a:使用外键关联 b:使用主键关联,两个表的主键相同
2、外键方案:配置关联关系:两个实体类互相关联,并且在关联的属性上添加一个@OneToOne代表一个对一个的关系;
在属性上添加@JoinColumn nme 存储外键的字段名称 referencedColumnNmae 对方表的字段名称 (可以省略)
3、级联操作: 需要再@OneToOne 注解中添加一个属性 casecade
CascadeType.PERSIST : 级联添加’ CascadeType.MEGGE : 级联更新’ CascadeType.REMOVE : 级联删除’ CascadeType.ALL : 增删改都用级联操作’
4、主键关联方案:不在使用@JoinColumn注解;使用@PrimaryKeyJoinColumn 注解不需要配置属性;两个实体类关联属性上都要添加
实体类一、
@Entity
@Table(name = "cst_customer")
public class Customer {
// 配置主键自增的策略
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name="cust_id")
private long custId;
@Column(name="cust_name")
private String custName;
@Column(name="cust_source")
private String custSource;
@Column(name="cust_indutry")
private String custIndutry;
@Column(name="cust_level")
private String custLevel;
@Column(name="cust_address")
private String custAddress;
@Column(name="cust_phone")
private String custPhone; //表一对一关系
@OneToOne
//使用外键关联表
@JoinColumn(name = "extid",referencedColumnName = "ext_id")
//使用主键关联表
// @PrimaryKeyJoinColumn
private CustomerExt customerExt; public CustomerExt getCustomerExt() {
return customerExt;
} public void setCustomerExt(CustomerExt customerExt) {
this.customerExt = customerExt;
}
}
实体类二、
@Entity
@Table(name = "cst_customer_ext")
public class CustomerExt {
@Id
@Column(name="ext_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long extId;
private String memo;
private String info; @OneToOne
@JoinColumn(name="custid",referencedColumnName = "cust_id")
// 主键关联
// @PrimaryKeyJoinColumn
private Customer customer; public Customer getCustomer() {
return customer;
} public void setCustomer(Customer customer) {
this.customer = customer;
}
}
二、编写dao:两个dao都要继承JpaRepository<CustomerExt,Long>
dao一、
public interface CustomerExtDao extends JpaRepository<CustomerExt,Long> {
}
dao二、
public interface CustomerDao extends JpaRepository<Customer,Long> {
}
三、测试
package cn.zrf.jpa; import cn.zrf.jpa.dao.CustomerDao;
import cn.zrf.jpa.dao.CustomerExtDao;
import cn.zrf.jpa.entity.Customer;
import cn.zrf.jpa.entity.CustomerExt;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Commit;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class OneToOneTest {
@Autowired
private CustomerDao customerDao;
@Autowired
private CustomerExtDao customerExtDao; @Test
@Transactional
@Commit
public void addCustomer(){
// 1创建Customer 对象
Customer customer = new Customer();
customer.setCustName("张无忌");
customer.setCustAddress("光明顶");
customer.setCustLevel("来了老弟");
// 2创建CustomerExt 对象
CustomerExt customerExt = new CustomerExt();
customerExt.setMemo("我是你哥哥");
customerExt.setInfo("371826");
//3配置对象之间的关联关系
customer.setCustomerExt(customerExt);
customerExt.setCustomer(customer);
// 4 把对象写入数据路
customerDao.save(customer);
customerExtDao.save(customerExt);
}
}
springData表关系:一对一的更多相关文章
- SpringData表关系:多对多
一.编写实体类配置关联关系: 1.多对多使用注解@ManyToMany配置:a. 在实体中添加一个集合属性 b.在属性上添加ManyToMany注解 c.@JoinTable 注解配置关联关系(nam ...
- springData表关系:一对多
一.编写实体类进行表关联 1.在一张表的关联属性上添加@OneToMany注解(关联属性用来记录多的一方的信息,是个集合,一般用set) 2.在另一个实体类的关联属性上添加@ManyToOne注解和 ...
- djjango models表关系
*** detail表级联 student表,detail获取student的学生信息,自己做为扩展 一对一关系 models.OneToOneField student = models.OneTo ...
- MySQL开发——【多表关系、引擎、外键、三范式】
多表关系 一对一关系 一对多或多对一关系 多对多关系 MySQL引擎 所谓的MySQL引擎就是数据的存储方式,常用的数据库引擎有以下几种: Myisam与InnoDB引擎之间的区别(面试) ①批量插入 ...
- Mysql多表关系
mysql多表关系 多表关系是关系型数据库特有的 三种关系 一对一关系 一对多关系 多对多关系 总结 一对一 例子:用户和用户信息 外键设置在用户上,外键字段唯一非空 添加 无级联:先增加被关联表记录 ...
- MySql 表结构修改、约束条件、表关系
表结构修改(alter) 查看表的结构:desc 表名; 修改表名:alter table 表名 rename to 新表名; 修改字段名:alter table 表名 change 旧字段名 新字段 ...
- mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...
- MySql 多表关系
多表关系 一对一关系 一对一关系是最好理解的一种关系,在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主键放置于人表里面 一对多关系 班级是1端,学生是多端,结合面向对象的思想 ...
- Python学习day43-数据库(多表关系)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
随机推荐
- 【山外笔记-云原生】《Docker+Kubernetes应用开发与快速上云》读书笔记-2020.04.25(六)
书名:Docker+Kubernetes应用开发与快速上云 作者:李文强 出版社:机械工业出版社 出版时间:2020-01 ISBN:9787111643012 [山外笔记-云原生]<Docke ...
- tensorflow1.0 数据队列FIFOQueue的使用
import tensorflow as tf #模拟一下同步先处理数据,然后才能取数据训练 #tensorflow当中,运行操作有依赖性 #1.首先定义队列 Q = tf.FIFOQueue(3,t ...
- 曹工杂谈--只用一个命令,centos系统里装了啥软件,啥时候装的,全都清清楚楚
前言 一直以来,对linux的掌握就是半桶水的状态,经常yum装个东西,结果依赖一堆东西:然后再用源码装个东西,只知道make.make install,背后干了啥也不清楚了,卸载也不方便. 这几天工 ...
- 微信jssdk遇到的一些问题汇总
1.用户手动去触发的接口可以直接调用比如wx.startRecord(); 但是写在页面加载完成里就无效,需要写在 wx.ready(function(){ wx.startRecord(); }); ...
- python学习22之函数式编程
'''''''''1.高阶函数:将函数作为参数传递到另一个函数中,作为这个函数的参数,这样的方式叫高阶函数(1)map:两个参数,一个是函数,一个是iterator,将函数依次作用于Iterator中 ...
- JDK14的新特性
文章目录 虽然JDK13在今年的9月17号才发布,但是丝毫不会影响到下一个版本JDK14的开发工作.听说官方定的新功能马上就要官宣了,我们这里不妨来提前推断一下. 在9月17号的发布中,Oracle提 ...
- (数据科学学习手札82)基于geopandas的空间数据分析——geoplot篇(上)
本文示例代码和数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在前面的基于geopandas的空间数据分 ...
- Linux硬盘分区知识
前言 硬盘使用前,一般要分区,格式化(创建文件系统)<== 存放数据 类比,房子使用前,一般要隔断,装修,买家具,再住人. 分区 一块硬盘: 主分区.扩展分区.逻辑分区 主分区+扩展分区的数量& ...
- Bubble Cup 11 - Finals [Online Mirror, Div. 1]题解 【待补】
Bubble Cup 11 - Finals [Online Mirror, Div. 1] 一场很好玩的题啊! I. Palindrome Pairs 枚举哪种字符出现奇数次. G. AI robo ...
- 浅谈 Objective-C Associated Objects
简介 Associated Objects 是 Objective-C 2.0 中 Runtime 的特性之一. 在 <objc/runtime.h> 中定义的三个方法, void obj ...