主表有兩個字段映射到副表,可以取得唯一記錄,但這條記錄不定存在,這兩個字段需要做條件過濾,就這個狀況。
Hibernate Annotation 配置的注意點:
- 需要映射字段的@Column屬性設為insertable = false, updatable = false,
- 不產生列重復的異常?
- 在hql解析的時候,自動合并相同的列(參考)
- 類必須implements Serializable,不然會拋ClassCaseException(郁悶4個小時 -_-!)

CODE
@Entity
@SequenceGenerator(name = " SEQ_GEN " ,?sequenceName = " SCOPEPROJECTIONSEQ " )
public ? class ?ScopeProjection? implements ?Serializable?{
???? private ?Integer?id;
???? private ?String?hubsite;
???? private ?String?companyabbr;
???? private ?ScopeProjectionOverride?override;
????@Id
????@Column(name? = ? " PROJECTIONID " )
????@GeneratedValue(strategy? = ?GenerationType.AUTO,?generator? = ? " SEQ_GEN " )
???? public ?Integer?getId()?{
???????? return ?id;
????}
???? public ? void ?setId(Integer?id)?{
???????? this .id? = ?id;
????}
????@Column(name? = ? " HUBSITENAME " ,?nullable? = ? false ,?insertable? = ? false ,?updatable? = ? false )
???? public ?String?getHubsite()?{
???????? return ?hubsite;
????}
???? public ? void ?setHubsite(String?hubsite)?{
???????? this .hubsite? = ?hubsite;
????}
????@Column(name? = ? " COMPANYABBREVIATION " ,?nullable? = ? false ,?insertable? = ? false ,?updatable? = ? false )
???? public ?String?getCompanyabbr()?{
???????? return ?companyabbr;
????}
???? public ? void ?setCompanyabbr(String?companyabbr)?{
???????? this .companyabbr? = ?companyabbr;
????}
????
????@OneToOne(cascade? = ?CascadeType.PERSIST)
????@JoinColumns?({
????????@JoinColumn(name? = ? " COMPANYABBREVIATION " ,?referencedColumnName? = ? " COMPANYABBREVIATION " ),
????????@JoinColumn(name? = ? " HUBSITENAME " ,?referencedColumnName? = ? " HUBSITENAME " )
????})
???? public ?ScopeProjectionOverride?getOverride()?{
???????? return ?override;
????}
???? public ? void ?setOverride(ScopeProjectionOverride?override)?{
???????? this .override? = ?override;
????}
}
@SequenceGenerator(name = " SEQ_GEN " ,?sequenceName = " SCOPEPROJECTIONSEQ " )
public ? class ?ScopeProjection? implements ?Serializable?{
???? private ?Integer?id;
???? private ?String?hubsite;
???? private ?String?companyabbr;
???? private ?ScopeProjectionOverride?override;
????@Id
????@Column(name? = ? " PROJECTIONID " )
????@GeneratedValue(strategy? = ?GenerationType.AUTO,?generator? = ? " SEQ_GEN " )
???? public ?Integer?getId()?{
???????? return ?id;
????}
???? public ? void ?setId(Integer?id)?{
???????? this .id? = ?id;
????}
????@Column(name? = ? " HUBSITENAME " ,?nullable? = ? false ,?insertable? = ? false ,?updatable? = ? false )
???? public ?String?getHubsite()?{
???????? return ?hubsite;
????}
???? public ? void ?setHubsite(String?hubsite)?{
???????? this .hubsite? = ?hubsite;
????}
????@Column(name? = ? " COMPANYABBREVIATION " ,?nullable? = ? false ,?insertable? = ? false ,?updatable? = ? false )
???? public ?String?getCompanyabbr()?{
???????? return ?companyabbr;
????}
???? public ? void ?setCompanyabbr(String?companyabbr)?{
???????? this .companyabbr? = ?companyabbr;
????}
????
????@OneToOne(cascade? = ?CascadeType.PERSIST)
????@JoinColumns?({
????????@JoinColumn(name? = ? " COMPANYABBREVIATION " ,?referencedColumnName? = ? " COMPANYABBREVIATION " ),
????????@JoinColumn(name? = ? " HUBSITENAME " ,?referencedColumnName? = ? " HUBSITENAME " )
????})
???? public ?ScopeProjectionOverride?getOverride()?{
???????? return ?override;
????}
???? public ? void ?setOverride(ScopeProjectionOverride?override)?{
???????? this .override? = ?override;
????}
}
@Entity
@SequenceGenerator(name = " SEQ_GEN " ,?sequenceName = " SCOPEOVERRIDESEQ " )
public ? class ?ScopeProjectionOverride? implements ?Serializable?{
???? private ?Integer?id;
???? private ?String?companyabbr;
???? private ?String?hubsitename;
????@Id
????@Column(name? = ? " OVERRIDEID " )
????@GeneratedValue(strategy? = ?GenerationType.AUTO,?generator? = ? " SEQ_GEN " )
???? public ?Integer?getId()?{
???????? return ?id;
????}
???? public ? void ?setId(Integer?id)?{
???????? this .id? = ?id;
????}
????@Column(name? = ? " COMPANYABBREVIATION " )
???? public ?String?getCompanyabbr()?{
???????? return ?companyabbr;
????}
???? public ? void ?setCompanyabbr(String?companyabbr)?{
???????? this .companyabbr? = ?companyabbr;
????}
???? public ?String?getHubsitename()?{
???????? return ?hubsitename;
????}
???? public ? void ?setHubsitename(String?hubsitename)?{
???????? this .hubsitename? = ?hubsitename;
????}
}
@SequenceGenerator(name = " SEQ_GEN " ,?sequenceName = " SCOPEOVERRIDESEQ " )
public ? class ?ScopeProjectionOverride? implements ?Serializable?{
???? private ?Integer?id;
???? private ?String?companyabbr;
???? private ?String?hubsitename;
????@Id
????@Column(name? = ? " OVERRIDEID " )
????@GeneratedValue(strategy? = ?GenerationType.AUTO,?generator? = ? " SEQ_GEN " )
???? public ?Integer?getId()?{
???????? return ?id;
????}
???? public ? void ?setId(Integer?id)?{
???????? this .id? = ?id;
????}
????@Column(name? = ? " COMPANYABBREVIATION " )
???? public ?String?getCompanyabbr()?{
???????? return ?companyabbr;
????}
???? public ? void ?setCompanyabbr(String?companyabbr)?{
???????? this .companyabbr? = ?companyabbr;
????}
???? public ?String?getHubsitename()?{
???????? return ?hubsitename;
????}
???? public ? void ?setHubsitename(String?hubsitename)?{
???????? this .hubsitename? = ?hubsitename;
????}
}