JPA一对一关联

简介:   这里我们仍然是使用annotation对实体进行配置。使用person与idcard模拟一对一的关联关系,一个人只能有一个ID号,同样一个ID号只能对应一个人,人与ID号是一对一的关联关系。Person类如下: 1 package com.

  这里我们仍然是使用annotation对实体进行配置。使用person与idcard模拟一对一的关联关系,一个人只能有一个ID号,同样一个ID号只能对应一个人,人与ID号是一对一的关联关系。Person类如下:

 1 package com.yichun.bean;
 2 
 3 import javax.persistence.CascadeType;
 4 import javax.persistence.Column;
 5 import javax.persistence.Entity;
 6 import javax.persistence.GeneratedValue;
 7 import javax.persistence.Id;
 8 import javax.persistence.JoinColumn;
 9 import javax.persistence.OneToOne;
10 import javax.persistence.Table;
11 
12 //关系的维护端
13 @Entity
14 @Table(name = "person")
15 public class Person {
16     private Integer id;
17     private String name;
18     private IDCard idcard;
19 
20     public Person() {
21     }
22 
23     public Person(String name) {
24         this.name = name;
25     }
26 
27     @Id
28     @GeneratedValue
29     public Integer getId() {
30         return id;
31     }
32 
33     public void setId(Integer id) {
34         this.id = id;
35     }
36 
37     @Column(length = 10, nullable = false)
38     public String getName() {
39         return name;
40     }
41 
42     public void setName(String name) {
43         this.name = name;
44     }
45 
46     @OneToOne(optional = false, cascade = CascadeType.ALL)//级联保存、修改、删除、同步
47     @JoinColumn(name = "idcard_id")// 外键的名称idcard_id
48     public IDCard getIdcard() {
49     return idcard;50     }   51 52     public void setIdcard(IDCard idcard) {53         this.idcard = idcard;
54     }
55 }

IDCard类如下:

 1 package com.yichun.bean;
 2 
 3 import javax.persistence.CascadeType;
 4 import javax.persistence.Column;
 5 import javax.persistence.Entity;
 6 import javax.persistence.GeneratedValue;
 7 import javax.persistence.Id;
 8 import javax.persistence.OneToOne;
 9 import javax.persistence.Table;
10 
11 //关系被维护端
12 @Entity
13 @Table(name = "idcard")
14 public class IDCard {
15     private Integer id;
16     private String cardno;
17     private Person person;
18 
19     public IDCard() {
20     }
21 
22     public IDCard(String cardno) {
23         this.cardno = cardno;
24     }
25 
26     @Id
27     @GeneratedValue
28     public Integer getId() {
29         return id;
30     }
31 
32     public void setId(Integer id) {
33         this.id = id;
34     }
35 
36     @Column(length = 18, nullable = false)
37     public String getCardno() {
38         return cardno;
39     }
40 
41     public void setCardno(String cardno) {
42         this.cardno = cardno;
43     }
44 
45     // 出现mappedBy的就是关系被维护端,由idCard维护, optional = false可以不设置
46     @OneToOne(mappedBy = "idcard", cascade = { CascadeType.PERSIST,
47             CascadeType.MERGE, CascadeType.REFRESH })//CascadeType.PERSIST 级联保存,CascadeType.MERGE 级联更新,CascadeType.REFRESH 级联刷新
48     public Person getPerson() {
49         return person;
50     }
51 
52     public void setPerson(Person person) {
53         this.person = person;
54     }
55 }

保存数据

 1     @Test
 2     public void save() {
 3         EntityManagerFactory factory = Persistence
 4                 .createEntityManagerFactory("testjpa");
 5         EntityManager manager = factory.createEntityManager();
 6         manager.getTransaction().begin();
 7 
 8         Person person = new Person("张三");
 9         IDCard idCard = new IDCard("1111122222");
10         person.setIdcard(idCard);
11         // 1、保存person
12         // 2、保存IDCard
13         // 3、使用IDCard的id作为外键保存到person里面
14         manager.persist(person);
15 
16         manager.getTransaction().commit();
17         manager.close();
18         factory.close();
19     }

 

目录
相关文章
Hertz中的CORS问题。
字节跳动开源框架Hertz,可能存在的CORS的跨域问题
Uma
|
分布式数据库 云栖大会 数据库
2018云栖大会——数据库内核专场:邀您探秘新一代分布式数据库X-DB
云栖大会倒计时2天!9月19日,阿里巴巴X-DB团队将携史上最强大咖阵容:达摩院科学家、阿里巴巴集团副总裁、数据库与存储技术负责人李飞飞教授,中科院陈世敏教授,以及各位资深技术大拿们为您带来一场纯正的技术盛宴
Uma
2312 0
|
5天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
307 116
|
20天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
504 45
Meta SAM3开源:让图像分割,听懂你的话
|
14天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
695 222