- 背景:
在实际开发中我们会遇到新建一个用户表,但这个表字段过长,而且有写字段常用(主要),有些字段比较不常用(次要)。此时,我们会考虑到把用户信息拆分到两张表中:member(存储用户主要信息),memberdetail(存储用户次要信息)。
那么,这两个表就是很明显是一对一的关系,一个用户的基本信息只需要存储一份。
上一章节我们介绍了在hibernate中一对一的关联关系通过外键来实现,本章节我们将会介绍,在hibernate中使用主键来实现一对一的关联关系。
- hibernate实现过程中,需要注意事项:
1)基于主键的映射策略:指一端的主键生成器使用foreign策略,表明根据“对方”的主键来生成自己的主键,自己并不能独立生成主键。<param>子元素指定使用当前持久化类的哪个属性作为“对方”。
2)采用foriegn主键生成器策略的一端增加one-to-one元素映射关联属性,其one-to-one属性还应该增加constranied="true"属性;另一端增加one-to-one元素映射关联属性。
3)constrained(约束):指定为当前持久化类对应的数据库表的主键添加一个外间约束,引用被关联的对象(“对方”)所对应的数据表主键。
- 测试:
新建工程hibernate6,在src下新建包com.dx.hibernate005.onetoonebyprimary,
在包下新建Member.java
1 package com.dx.hibernate005.onetoonebyprimary; 2 3 import java.util.Date; 4 5 public class Member { 6 private Integer id; 7 private String username; 8 private String password; 9 private Date createTime; 10 private MemberDetail memberDetail; 11 12 public Member() { 13 super(); 14 } 15 16 public Member(String username, String password, Date createTime) { 17 super(); 18 this.username = username; 19 this.password = password; 20 this.createTime = createTime; 21 } 22 23 public Integer getId() { 24 return id; 25 } 26 27 public void setId(Integer id) { 28 this.id = id; 29 } 30 31 public String getUsername() { 32 return username; 33 } 34 35 public void setUsername(String username) { 36 this.username = username; 37 } 38 39 public String getPassword() { 40 return password; 41 } 42 43 public void setPassword(String password) { 44 this.password = password; 45 } 46 47 public Date getCreateTime() { 48 return createTime; 49 } 50 51 public void setCreateTime(Date createTime) { 52 this.createTime = createTime; 53 } 54 55 public MemberDetail getMemberDetail() { 56 return memberDetail; 57 } 58 59 public void setMemberDetail(MemberDetail memberDetail) { 60 this.memberDetail = memberDetail; 61 } 62 63 }