SpringDataJpa备忘录
- 单向多对一关系
//产品类型 一的一方
@Entity
public class ProductDir {
@Id
@GeneratedValue
private Long id;
private String name;
}
//产品,多方
@Entity
public class Product {
@Id
@GeneratedValue
private Long id;
private String name;
//一方的对象
@ManyToOne //默认配置的ManyToOne 会自定键为外键,外键的名称=属性名_id
//多个产品Product对应一个产品类型dir
// 不能使用@Column(name = "dir_id")
@JoinColumn(name = "dir_id")
private ProductDir dir;
}
junit
@Test
public void testSaveProduct() {
Product product = new Product();
product.setName("牛逼");
productService.save(product);
System.out.println("保存成功->"+product);
Product product2 = new Product();
product2.setName("牛逼2");
product2.setDir(new ProductDir());
try {
productService.save(product2);
}catch (Exception e){
System.out.println("该操作会报错->因为一的那方没有id,即缺少外键关系");
}
Product product3 = new Product();
product3.setName("牛逼2");
ProductDir productDir = new ProductDir();
productDir.setName("牛逼的类型");
productDirService.save(productDir);
product3.setDir(productDir);//此时的产品类型有了id
productService.save(product3);
System.out.println("保存成功->"+product3);
System.out.println("保存成功->"+productDir);
}
![]()
@ManyToOne(fetch = FetchType.EAGER) 默认抓取策略,及时加载,一条sql语句
@OneToMany(fetch = FetchType.LAZY) 延时加载,多条sql语句(多的一方默认延时加载)
- 单向一对多关系
//产品,多方
@Entity
public class Product2 {
@Id
@GeneratedValue
private Long id;
private String name;
}
//产品类型 一的一方
@Entity
public class ProductDir2 {
@Id
@GeneratedValue
private Long id;
private String name;
//单向一对多
@OneToMany
//必须配置外键id,否则会多生成一张表吗,形成多对多的关系
@JoinColumn(name = "dir_id")//建议在一的一方实例化集合
//(便于后面保存操作)
private Set products = new HashSet<>();
}
junit
@Test
public void testSaveProduct2() {
Product2 product11 = new Product2();
product11.setName("产品11");
Product2 product22 = new Product2();
product22.setName("产品22");
ProductDir2 productDir2 = new ProductDir2();
productDir2.setName("牛逼2");
productDir2.getProducts().add(product11);
productDir2.getProducts().add(product22);
product2Service.save(product11);//保存后得到主键
product2Service.save(product22);//即获得外键关系
productDir2Service.save(productDir2);
System.out.println("保存成功->"+productDir2);
System.out.println("保存成功->"+product11);
System.out.println("保存成功->"+product22);
}
排序
//单向一对多
@OneToMany
//必须配置外键id,否则会多生成一张表吗,形成多对多的关系
@JoinColumn(name = "dir_id")//建议在一的一方实例化集合(便于后面保存操作)
@OrderBy("id")//默认属性值,不写即升序,
//@OrderBy("id DESC")
private Set products = new HashSet<>();
- 双向一对多关系
//产品,多方
@Entity
public class Product {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dir_id")
private ProductDir dir;
}
//产品类型 一的一方
@Entity
public class ProductDir {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(fetch = FetchType.LAZY,mappedBy = "dir")
//双向一对多,不配置@JoinColumn,配置新的属性mappedBy = "dir"
//表示一方的关系参照多方Product属性dir来管理
private Set products = new HashSet<>();
}
SpringDataJpa备忘录的更多相关文章
- MementoPattern(备忘录模式)
/** * 备忘录模式 * @author TMAC-J * 用于存储bean的状态 */ public class MementoPattern { public class Memento{ pr ...
- C#设计模式-备忘录模式
访问者模式的实现是把作用于某种数据结构上的操作封装到访问者中,使得操作和数据结构隔离.而本文要介绍的备忘者模式与命令模式有点相似,不同的是,命令模式保存的是发起人的具体命令(命令对应的是行为),而备忘 ...
- Vuex2.0+Vue2.0构建备忘录应用实践
一.介绍Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,适合于构建中大型单页应用. ...
- 设计模式03备忘录(java)
先贴代码有空来写内容. 备忘录1 //简单的备忘录,只可以记录上一次修改前的状态,实现撤回一次的操作. class Student{ private String name; private Stri ...
- C#设计模式系列:备忘录模式(Memento)
1.备忘录模式简介 1.1>.定义 备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态. 1.2>.使用频率 ...
- php实现设计模式之 备忘录模式
<?php /*备忘录模式:在不破坏封装的前提下,获取对象的内部状态,并且在对象外保存该状态.这样就可以将该对象恢复到保存之前的状态(行为模式) * * 发起人:记录当前时刻的内部状态,负责定义 ...
- 十一个行为模式之备忘录模式(Memento Pattern)
定义: 在不破坏原有封装的情况下,捕获一个对象的内部状态,并在对象之外保存.当对象出错或者无效是,可以根据该备忘录进行恢复. 结构图: Originator:原发类,被记录的对象,包含若干内部状态.一 ...
- 自适应备忘录 demo
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- java设计模式之备忘录模式
备忘录模式 备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.一听到备忘录这个字的时候想起了小小时打的游 ...
随机推荐
- 【C# 线程】 volatile 关键字和Volatile类、Thread.VolatileRead|Thread.VolatileWrite 详细 完整
overview 同步基元分为用户模式和内核模式 用户模式:Iterlocked.Exchange(互锁).SpinLocked(自旋锁).易变构造(volatile关键字.volatile类.Thr ...
- Python:numpy
学习自:NumPy 教程 | 菜鸟教程 官网:Numpy官方文档 1.简介 numpy主要用于数组计算,包含: 1)一个强大的N维数组对象ndarray 2)广播功能函数 3)整合 C/C++/For ...
- 【python画圆】pip安装库时出现Read timed out.解决办法
昨天第一次用python画圆,当时并没有安装numpy库(导入数据包)和matplotlib库(导入图形包),于是尝试用pip安装库 首先,我先更新了pip,如下图: 顺便附上成功截图: 然后安装nu ...
- 测试平台系列(90) 编写oss客户端
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节我们编写了在线执行测试 ...
- centos7运行system-config-kickstart时报错
centos7运行system-config-kickstart时在Package Selection模块中出现如下错误: Package Selection Packageselection is ...
- scoped样式
scoped样式 作用∶让样式在局部生效防止冲突 写法∶<style scoped> 比如School组件和Student组件的样式名一样,当组件汇总到一起时样式会冲突.所以加上scope ...
- 分析vue脚手架
执行流程: 执行npm run serve.找到了main.js文件,之后引入Vue.App等等.后来找到App组件,发现里面用到了组件School,于是执行School组件,最终汇总到App组件.通 ...
- netty系列之:netty中各不同种类的channel详解
目录 简介 ServerChannel和它的类型 Epoll和Kqueue AbstractServerChannel ServerSocketChannel ServerDomainSocketCh ...
- ROS路由器DHCP地址不够使用解决办法!
由于这段时间公司使用ROS6.2+AC控制器+AP的方案做了公WIFI覆盖,但最近发现地址被用完. 如果使用默认的地址192.168.1.1-192.168.8.254,最多只有254个地址可用,但内 ...
- windows2008R2重建索引
windows索引服务 索引服务是一项系统服务(Indexing Service),使用文档筛选器读取整个文档,并提取文档和属性传递给索引程序,这个过程称为"索引".索引服务可以从 ...