项目结构:

Wife


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.OneToOne;
import javax.persistence.Table;@Entity
@Table(name="wife")
public class Wife {private int id;private String name;private int age;private Husband husband;@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;}//mappedBy="wife"表示Husband中wife属性已经做映射,如果不写mappedBy="wife"会在wife表中生成一个husband_id外键,这是多余的。//mappedBy指向被维护端wife,由husband维护@OneToOne(mappedBy="wife",cascade=CascadeType.ALL,fetch=FetchType.LAZY,targetEntity=Husband.class)public Husband getHusband() {return husband;}public void setHusband(Husband husband) {this.husband = husband;}
}

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());@Autowiredprivate HusbandRepository husDao;@Autowiredprivate WifeRepository wifeDao;public void addUser(){Husband hus=new Husband();hus.setAge(23);hus.setName("wy2");Wife wife=new Wife();wife.setName("xxt2");wife.setAge(22);wife.setHusband(hus);wifeDao.save(wife);}public void deleteUser(){wifeDao.delete(7);}public void updateUser(){Wife wife=wifeDao.findOne(8);wife.setName("wf");wife.getHusband().setName("updatehus");wifeDao.save(wife);}public String queryUser(){Wife wife=wifeDao.findOne(8);return JSONObject.toJSONString(wife);}
}

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

insert intowife(age, name) values (?, ?) 2017-05-26 09:01:21,653 DEBUG [org.hibernate.id.IdentifierGeneratorHelper:94] - Natively generated identity: 9 2017-05-26 09:01:21,664 DEBUG [org.hibernate.engine.spi.ActionQueue:196] - Executing identity-insert immediately 2017-05-26 09:01:21,665 DEBUG [org.hibernate.SQL:109] - insert into husband (age, name) values (?, ?)

delete

delete fromhusband whereid=?
2017-05-26 08:58:00,180 DEBUG [org.hibernate.SQL:109] - delete from wife where id=?

update

updatehusband setage=?,name=? where id=? 2017-05-26 09:10:33,317 DEBUG [org.hibernate.SQL:109] - update wife set age=?, name=? where id=?

query

selectwife0_.id as id1_1_0_,wife0_.age as age2_1_0_,wife0_.name as name3_1_0_ fromwife wife0_ wherewife0_.id=?
2017-05-26 09:00:05,215 DEBUG [org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl:127] - Starting ResultSet row #0 2017-05-26 09:00:05,219 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-26 09:00:05,241 DEBUG [org.hibernate.engine.internal.TwoPhaseLoad:160] - Resolving associations for [auth.model.Wife#8] 2017-05-26 09:00:05,243 DEBUG [org.hibernate.SQL:109] - 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=?

转载于:https://www.cnblogs.com/JAYIT/p/6903924.html

jpa双向一对一关联外键映射相关推荐

  1. JPA的双向一对一关联实现示例

    本篇的环境 本篇基于Spring Boot + JPA+ MySQL. 表自动维护: 配置 ddl-auto: update,使用 Hibernate 根据类自动维护表. 环境搭建参考: Spring ...

  2. 关于hibernate的关联外键生成以及外键属性列的正确插入即:解决外键插入时,在关联表中除了外键列为空,其它属性均正常级联保存

    关于hibernate的关联外键生成以及外键属性列的正确插入即:解决外键插入时,在关联表中除了外键列为空,其它属性均正常级联保存 其实解决办法十分简单: 首先确保你能够级联保存数据,当然除了关联表的外 ...

  3. java外键实体类_java – 在Embeddable类中的外键映射

    我正在使用 eclipselink进行JPA.我有一个实体,它有一个由两个字段组成的复合键.以下是我的Embeddable主键类的字段(成员). @Embeddable public class Le ...

  4. models.ForeignKey( ,on_delete=models.CASCADE)    # 关联外键

    # 关联外键 sgrade = models.ForeignKey("Grades",on_delete=models.CASCADE) 版本跟新后忘记加on_delete=mod ...

  5. JPA配置不生成外键

    JPA配置不生成外键 通过查看源码发现创建外键的SQL语句是通过Dialect的StandardForeignKeyExporter对象来生成的,而JPA(hibernate)允许我们自定义Diale ...

  6. Hibernate一对一关联------主键关联(亲测成功)

    1.创建两个实体(Company.java和Login.java)代码如下: 1 package wck.stu.vo.onetoonein; 2 3 public class Company { 4 ...

  7. 使用Entity Framework和WCF Ria Services开发SilverLight之4:Map之主外键映射

    上一篇粗粗讲了一下如何使用EF4.1,针对POCO进行MAP,此篇在此基础上进行一下深入,具体讲一下如何进行映射.   1:主外键中的1对多映射 还是针对School数据库.查看如下两个表: 可以知道 ...

  8. ef mysql 外键 一对一_MySQL 外键 一对一 一对多 多对多 复制

    #外键 ## 1,学习外键首先要明白表与表之间的关系 ​ 首先要换位思考 在考虑了这边 还要考虑另一边 ​ 然后在下定论### 判断表关系的语法 #### 图书与出版社 ​ 一本书可不可以有多个出版社 ...

  9. Hibernate双向一对一对象关系模型映射

    一个员工一辆车:one-to-one 实现一:让汽车表中的外键唯一 1 create table emp 2 ( 3 eid int primary key auto_increment, 4 ena ...

最新文章

  1. 解析postgresql 删除重复数据案例
  2. node + express + mysql 搭建后台
  3. Chrome 技术篇-常用web调试技巧清除缓存并硬性重新加载
  4. mysql 技能进阶_mysql的高级进阶(一)
  5. linux中的c技术,基于linux下C开发中的几点技术经验总结
  6. rocketmq底层通信模块解析
  7. Eclipse字体颜色控制
  8. python刷课思路_江西干部网络学院-刷课思路
  9. 网页右下角弹出的图片无法显示
  10. 史上最大,人工智能算法模型GPT-3问世,这意味着什么?
  11. 虚拟机出现entering emergency mode,使用xfs_rapair出现Device or resource busy解决
  12. Unity开发WebGL项目开发问题与解决方法汇总
  13. 解决:“证书错误,导航已阻止”
  14. vlookup使用步骤_vlookup函数的使用方法
  15. java 下载文件的文件名乱码_详细解决java文件下载文件名乱码问题
  16. 新生活、新成长、新认知
  17. wps连接mysql odbc_如何在WPS中使用ADO连接数据库?
  18. PMP-商业论证中的财务测量指标-动态投资回收期、净现值、内部收益率、效益成本率计算
  19. HDU4417 主席树入门2
  20. Optimizing Bloom Filter: Challenges, Solutions, and Comparisons论文总结

热门文章

  1. Vue编写添加用户的表单 ~ 不要错过哦
  2. python 从列表中随机选择_使用条件Python从列表中随机选择
  3. 的ppt_PPT丨清新淡雅年终总结PPT模板
  4. java下载网络文件_java 从网络Url中下载文件
  5. 【CSP201312-4】有趣的数(数位DP)
  6. 【NOIP2015】【Luogu2669】金币(模拟)
  7. Win10 独立音量调整
  8. UVa 1588 - Kickdown(BUG)
  9. mac允许安装未知来源_macOS 10.13及以上版本安装允许任何来源没了怎么开启?
  10. php语句过滤掉html标签_php过滤HTML标签、属性等正则表达式