一对一关系的例子:
一个人(
People
)只有唯一的身份证号
(IDCard)
,
People
与
IDCard
是一对一关系
一对一关系需要在关系维护端(
owner side
)的
@OneToOne
注释中定义
mappedBy
属性。在关系被维护端(
inverse side
)通过@JoinColumn建立外键列指向关系维护端的主键列。
public
class
People
implements
Serializable{
private
IDCard
idcard
;
。。。。。
@OneToOne
(optional=
true
,cascade=CascadeType.
ALL
,mappedBy=
"people"
)
public
IDCard getIdcard() {
return
idcard
;
}
}
public
class
IDCard
implements
Serializable{
private
People
people
;
。。。。。
@OneToOne
(optional =
false
, cascade = CascadeType.
REFRESH
)
@JoinColumn
(name =
"People_ID"
,
referencedColumnName
=
"peopleId"
,unique =
true
)
public
People getPerson() {
return
people
;
}
}
@OneToOne
注释五个属性:
targetEntity
、
cascade
、
fetch
、
optional
和
mappedBy
,
属性的具体含义与
@ManyToOne
注释的同名属性相同。
fetch
属性默认值是
FetchType.EAGER
。
上面例子中People class设置
optional = true
表示
idcard
属性可以为
null
,
也就是允讦没有身份证,未成年人就是没有身份证的。
上面例子中IDCard class设置
optional = false
表示
people
属性值不能为
null
,
也就是身份证必须有对应的主人
。
@JoinColumn(name = "People_ID", referencedColumnName ="personId",unique = true)
指明
:
IDCard
对应表的
Person_ID
列作为外键与
Person
对应表的
personId
列进行关联
, unique = true
指明
Person_ID
列的值不可重复
。