JPA一对一关联
这里我们仍然是使用annotation对实体进行配置。使用person与idcard模拟一对一的关联关系,一个人只能有一个ID号,同样一个ID号只能对应一个人,人与ID号是一对一的关联关系。Person类如下:
package com.yichun.bean; import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table; //关系的维护端
@Entity
@Table(name = "person")
public class Person {
private Integer id;
private String name;
private IDCard idcard; public Person() {
} public Person(String name) {
this.name = name;
} @Id
@GeneratedValue
public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} @Column(length = 10, nullable = false)
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @OneToOne(optional = false, cascade = CascadeType.ALL)//级联保存、修改、删除、同步
@JoinColumn(name = "idcard_id")// 外键的名称idcard_id
public IDCard getIdcard() {
return idcard; } public void setIdcard(IDCard idcard) { this.idcard = idcard;
}
}
IDCard类如下:
package com.yichun.bean; import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table; //关系被维护端
@Entity
@Table(name = "idcard")
public class IDCard {
private Integer id;
private String cardno;
private Person person; public IDCard() {
} public IDCard(String cardno) {
this.cardno = cardno;
} @Id
@GeneratedValue
public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} @Column(length = 18, nullable = false)
public String getCardno() {
return cardno;
} public void setCardno(String cardno) {
this.cardno = cardno;
} // 出现mappedBy的就是关系被维护端,由idCard维护, optional = false可以不设置
@OneToOne(mappedBy = "idcard", cascade = { CascadeType.PERSIST,
CascadeType.MERGE, CascadeType.REFRESH })//CascadeType.PERSIST 级联保存,CascadeType.MERGE 级联更新,CascadeType.REFRESH 级联刷新
public Person getPerson() {
return person;
} public void setPerson(Person person) {
this.person = person;
}
}
保存数据
@Test
public void save() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("testjpa");
EntityManager manager = factory.createEntityManager();
manager.getTransaction().begin(); Person person = new Person("张三");
IDCard idCard = new IDCard("1111122222");
person.setIdcard(idCard);
// 1、保存person
// 2、保存IDCard
// 3、使用IDCard的id作为外键保存到person里面
manager.persist(person); manager.getTransaction().commit();
manager.close();
factory.close();
}
JPA一对一关联的更多相关文章
- JPA 系列教程10-双向一对一关联表
双向一对一关联表的ddl语句 CREATE TABLE `t_person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255 ...
- Spring Data JPA:关联映射操作
1.一对一的关系关联 需求:用户和角色一对一关联 package com.example.jpa.pojo; import javax.persistence.*; @Entity @Table(na ...
- Hibernate中的一对一关联
Hibernate提供了两种一对一映射关联关系的方式: 1)按照外键映射 2)按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映 ...
- Hibernate一对一关联映射配置
一.一对一关联 Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射.下面以员工账号和员工档案表为例,介绍这两种映射方式,并使用这两种映射方式分别完成以下持久化操作: (1 ...
- Hibernate之映射一对一关联
一.一对一关联的概念: 一对一之间的关联是指:两张表中的信息是一对一的关系,比如我们每个人和身份证的关系,一个人对应一张身份证,一张身份证也只能对应一个人. Hibernate提供了两种映射一对一关联 ...
- EF – 6.一对一关联
5.6.6 <一对一关联概述> 5.6.7 <一对一关联CRUD演示> 在两讲视频中,首先介绍了数据库中一对一关联表的设计规范,接着通过实例介绍了如何合适Entity Fr ...
- Hibernate中一对一关联映射/组件映射
Hibernate映射:一对一关联 1.按照外键映射 2.按照主键映射 组件映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映射方式分别 ...
- Hibernate中的一对一关联和组件的映射
Hibernate提供了两种映射一对一映射关联关系的方式: 01.按照外键映射 02.按照主键映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这 ...
- 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句
如题: 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句不是一条关联查询语句. 例如: $list = $db->relation(true) ...
随机推荐
- .Net魔法堂:史上最全的ActiveX开发教程——部署篇
一.前言 接<.Net魔法堂:史上最全的ActiveX开发教程——发布篇>,后我们继续来部署吧! 二. 挽起衣袖来部署 ActiveX的部署其实就是客户端安装ActiveX组件,对未签 ...
- python下的orm基本操作(1)--Mysql下的CRUD简单操作(含源码DEMO)
最近逐渐打算将工作的环境转移到ubuntu下,突然发现对于我来说,这ubuntu对于我这种上上网,收收邮件,写写博客,写写程序的时实在是太合适了,除了刚接触的时候会不怎么完全适应命令行及各种权限管理, ...
- java和javascript双引号嵌套的问题
双引号不能嵌套双引号,否则一对双引号就结束了. java中双引号中嵌套双引号需要转义: /** * java双引号转义符测试 * @author asus * */ public static voi ...
- VC使用libcurl模拟登录CSDN并自动评论资源以获取积分
环境:Win7 64位+VC2008 软件及源码下载:(http://pan.baidu.com/s/1jGE52pK) 涉及到的知识点: C++多线程编程 libcurl的使用(包括发送http请求 ...
- (Python学习4)List对象
1.PyListObject对象 typedef struct { PyObject_VAR_HEAD PyObject **ob_item; Py_ssize_t allocated; } PyLi ...
- sencha grid列tooltip提示
grid的某一列添加renderer: renderer: function(value, metaData, record, rowIndex, colIndex, store, view) { m ...
- 【jQuery基础学习】07 jQuery表单插件-Form
作用:jQuery Form插件的作用是为了让我们可以很方便地用ajax的方式提交表单,从而使我们提交表单的时候页面不用进行刷新. 它的核心方法是ajaxForm()和ajaxSubmit() 升级表 ...
- javascript的 == 与 === 的区别
1.对于基础类型,例如string,number ==和===是有区别的 1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等 2)同类型比较,直 ...
- python面向对象(一),Day6
connfigparser模块 xml模块 shutil模块以及压缩解压 subprocess模块 面向对象(上) 类和对象 onfigParser 用于对特定的配置进行操作,当前模块的名称在 pyt ...
- spring中常用工具类介绍
http://www.cnblogs.com/langtianya/p/3875103.html 文件资源操作 Spring 定义了一个 org.springframework.core.io ...