1.簡單主鍵:
使用
@Id
注解可以將實體bean中的某個屬性定義為標識字段.使用
@GeneratedValue
注解可以定義標識字段的生成策略:
AUTO - 可以是identity類型的字段,或者sequence類型或者table類型,取決于不同的底層數據庫.
TABLE - 使用表保存id值
IDENTITY - identity字段
SEQUENCE - sequence
@Id?@GeneratedValue(strategy
=
GenerationType.IDENTITY)
public
?Long?getId()?{?
?}
2.組合主鍵:
定義組合主鍵的幾種語法:
-
將組件類注解為@Embeddable,并將組件的屬性注解為@Id
-
將類注解為@IdClass,并將該實體中所有屬于主鍵的屬性都注解為@Id
使用
@IdClass
組合來定義組合主鍵類
,
對應了一個實體類中的多個字段或屬性, 而且主鍵類中用于定義主鍵的字段或屬性和實體類中對應的字段或屬性在類型上必須一致.
@Entity
@IdClass(FootballerPk.
class
)?
//
?指明主鍵類
public
?
class
?Footballer?{
//
part?of?the?id?key
@Id?
public
?String?getFirstname()?{
return
?firstname;
}
public
?
void
?setFirstname(String?firstname)?{
this
.firstname?
=
?firstname;
}
//
part?of?the?id?key
@Id?
public
?String?getLastname()?{
return
?lastname;
}
public
?
void
?setLastname(String?lastname)?{
this
.lastname?
=
?lastname;
}
public
?String?getClub()?{
return
?club;
}
public
?
void
?setClub(String?club)?{
this
.club?
=
?club;
}
//
appropriate?equals()?and?hashCode()?implementation
}
@Embeddable??
//
?主鍵類
public
?
class
?FootballerPk?
implements
?Serializable?{
//
same?name?and?type?as?in?Footballer
public
?String?getFirstname()?{
return
?firstname;
}
public
?
void
?setFirstname(String?firstname)?{
this
.firstname?
=
?firstname;
}
//
same?name?and?type?as?in?Footballer
public
?String?getLastname()?{
return
?lastname;
}
public
?
void
?setLastname(String?lastname)?{
this
.lastname?
=
?lastname;
}
//
appropriate?equals()?and?hashCode()?implementation
}