• 背景:

  在实际开发中我们会遇到新建一个用户表,但这个表字段过长,而且有写字段常用(主要),有些字段比较不常用(次要)。此时,我们会考虑到把用户信息拆分到两张表中: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 }
View Code

相关文章: