jpa单向一对一关系外键映射
项目结构:

Wife
package auth.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="wife")
public class Wife {
private int id;
private String name;
private int age;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="age")
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Husband
package auth.model;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name="husband")
public class Husband {
private int id;
private String name;
private int age;
private Wife wife;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="age")
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//注意:这个husband的id要和wife的id一样,表的主键同时是另一张表的外键,不然无法关联
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,targetEntity=Wife.class)
@JoinColumn(name="id", unique=true, nullable=false, updatable=false)
public Wife getWife() {
return wife;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
DAO:
package auth.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import auth.model.Husband;
public interface HusbandRepository extends JpaRepository<Husband, Integer>{
}
package auth.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import auth.model.Wife;
public interface WifeRepository extends JpaRepository<Wife, Integer>{
}
UserController
package auth.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import auth.dao.HusbandRepository;
import auth.dao.WifeRepository;
import auth.model.Husband;
import auth.model.Wife;
@Service
public class UserController {
private Logger log=LoggerFactory.getLogger(this.getClass());
@Autowired
private HusbandRepository husDao;
@Autowired
private WifeRepository wifeDao;
public void addUser(){
Husband hus=new Husband();
hus.setAge(23);
hus.setName("wy");
Wife wife=new Wife();
wife.setName("xxt");
wife.setAge(22);
hus.setWife(wife);
husDao.save(hus);
}
public void deleteUser(){
husDao.delete(6);
}
public void updateUser(){
Husband hus=husDao.findOne(7);
hus.setName("ws");
hus.getWife().setName("updatelcy");
husDao.save(hus);
}
public String queryUser(){
Husband husband=husDao.findOne(8);
return JSONObject.toJSONString(husband);
}
}
Tests
package spring;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import auth.controller.UserController;
public class Tests extends Base{
@Autowired
private UserController con;
@Test
public void addUser(){
con.addUser();
}
@Test
public void deleteUser(){
con.deleteUser();
}
@Test
public void updateUser(){
con.updateUser();
}
@Test
public void queryUser(){
String result=con.queryUser();
System.out.println(result);
}
}
运行过程:
add
2017-05-25 12:59:21,930 DEBUG [org.hibernate.SQL:109] -
insert
into
husband
(age, name)
values
(?, ?)
2017-05-25 12:59:21,981 DEBUG [org.hibernate.id.IdentifierGeneratorHelper:94] - Natively generated identity: 6
2017-05-25 12:59:21,990 DEBUG [org.hibernate.engine.spi.ActionQueue:196] - Executing identity-insert immediately
2017-05-25 12:59:21,991 DEBUG [org.hibernate.SQL:109] -
insert
into
wife
(age, name)
values
(?, ?)
delete
delete
from
wife
where
id=?
2017-05-25 14:55:37,618 DEBUG [org.hibernate.SQL:109] -
delete
from
husband
where
id=?
update
update
wife
set
age=?,
name=?
where
id=?
2017-05-25 14:46:32,037 DEBUG [org.hibernate.SQL:109] -
update
husband
set
age=?,
name=?
where
id=?
query
select
husband0_.id as id1_0_0_,
husband0_.age as age2_0_0_,
husband0_.name as name3_0_0_
from
husband husband0_
where
husband0_.id=?
2017-05-25 14:48:24,685 DEBUG [org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl:127] - Starting ResultSet row #0
2017-05-25 14:48:24,687 DEBUG [org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl:142] - On call to EntityIdentifierReaderImpl#resolve, EntityKey was already known; should only happen on root returns with an optional identifier specified
2017-05-25 14:48:24,705 DEBUG [org.hibernate.engine.internal.TwoPhaseLoad:160] - Resolving associations for [auth.model.Husband#8]
2017-05-25 14:48:24,708 DEBUG [org.hibernate.SQL:109] -
select
wife0_.id as id1_1_0_,
wife0_.age as age2_1_0_,
wife0_.name as name3_1_0_
from
wife wife0_
where
wife0_.id=?
查询运行结果:
{"age":23,"id":8,"name":"wy","wife":{"age":22,"id":8,"name":"xxt"}}
jpa单向一对一关系外键映射的更多相关文章
- jpa双向一对一关联外键映射
项目结构: Wife package auth.model; import javax.persistence.CascadeType; import javax.persistence.Column ...
- Hibernate中映射一对一关联(按主键映射和外键映射)和组件映射
Hibernate中映射一对一关联(按主键映射和外键映射)和组件映射 Hibernate提供了两 ...
- Entity Framework - 理清关系 - 基于外键关联的单向一对一关系
注:本文针对的是 Entity Framework Code First 场景. 之前写过三篇文章试图理清Entity Framework中的一对一关系(单相思(单向一对一), 两情相悦(双向一对 ...
- Entity Framework - 基于外键关联的单向一对一关系
代码的世界,原以为世界关系很简单,确道是关系无处不在.NET世界里ORM框架中EntityFramework作为其中翘楚,大大解放了搬砖工作的重复工作,着实提高了不少生产力,而也碰到过不少问题!比如关 ...
- 011一对一 唯一外键关联映射_单向(one-to-one)
² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ² 有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库 ...
- JPA 系列教程9-双向一对一唯一外键
双向一对一唯一外键的ddl语句 CREATE TABLE `t_person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(25 ...
- 012一对一 唯一外键关联映射_双向(one-to-one)
² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号) ² 有两种策略可以实现一对一的关联映射 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系:数据库 ...
- Hibernate之关联关系映射(一对一主键映射和一对一外键映射)
1:Hibernate的关联关系映射的一对一外键映射: 1.1:第一首先引包,省略 1.2:第二创建实体类: 这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信 ...
- Hibernate一对一外键映射
Hibernate 一对一外键映射 ------------------------------ ----- ...
随机推荐
- HTTP协议,详解
整合网上各种资料,原创,不懂可以加 QQ:3111901846 一般学习一样新的知识,你首先要问问自己这三个问题,如果学完以后,你能回答出来这几个问题,证明你还是不错的 1.什么是HTTP协议?2.H ...
- IE浏览器右键菜单分享扩展
(如果本页面没有自动下载,请点这里下载) IE浏览器分享工具安装步骤:1.发起下载请求后,屏幕上会弹出文件保存对话框,将文件保存到您电脑本地的磁盘中 2.双击刚才下载的安装文件,将JiaThis_Sh ...
- PHP操作MongoDB数据库具体样例介绍(增、删、改、查) (六)
PHP操作mongodb: PHP 要操作mongodb须要打模块 官网能够下载:http://pecl.php.net/package/mongo 下载 mongodb设置成用户授权的启动方式 ph ...
- 手动安装minGW
minGW是C语言编译包,将GCC编译器在Windows平台上编译软件提供支持. 手工安装minGW是一件很繁琐的事情,但是搞懂它很有用,因为C语言本身是一个很小的语法系统,全靠 各种库在支持,安装m ...
- vue 插件
开发插件 插件通常会为vue添加全局功能,插件的范围没有限制--一般有下面几种: 1,添加全局方法或者属性,例:vue-coustom-element 2,添加全局资源:指令.过滤器,.过渡等,如vu ...
- 初窥XSS跨站脚本攻击
XSS跨站脚本攻击的分类 一. 反射型XSS跨站脚本攻击 二. 存储型XSS跨站脚本攻击 三. 基于DOM的XSS跨站脚本攻击 1.反射性XSS 经过后端,不经过数据库 2.储存型XSS 经过后端,经 ...
- ext异常,ExceptionReturn
package cn.edu.hbcf.common.vo; import java.io.PrintWriter; import java.io.StringWriter; /** * Ext 异常 ...
- 1.3 Services - 服务
服务是一种应用组件,它可以在后台执行耗时的操作,它是没有用户界面的.其它的应用组件都可以开启一个服务,服务开启后,即使用户离开了应用,服务仍然可以在后台运行.此外,绑定到服务的组件可以与服务进行交互, ...
- 提高.net程序性能和稳定性-CLR Profile
CLR Profile能够看到应用程序的内存堆栈情况并且能够查询垃圾回收机制的行为.利用CLR Profile可以确定你的代码哪儿分配了太多内存,从而导致垃圾回收机制的执行,哪些代码长时间的占有内存. ...
- javascript之查找数组元素
基本思想: 比对数组中元素,相等者输出元素在数组的下标,否则就输出没找到! 代码如下: function Orderseach(array,findVal){ var temp = false; // ...