//////////2016-12-16 ~ 2016-12-17///////////
int study_data(){
Hibernate關系映射
一對一關系:
應用場景:? ? 數(shù)據(jù)脫敏
? ? ? ? ? ? ? ? ? ? ? ?共享主鍵
關系定義(主控方):
xml:?
<one-to-one name="propertyName" class="className" cascade="all" />
annotation:
@OneToOne
@PrimaryKeyJoinColumn
關系定義(被控方):
xml:
<one-to-one name="propertyName" class="className" />
annotation:
@OneToOne(mappedBy="propertyName")
一對多關系:
應用場景:? ??
? ? 定義外鍵連接
關系定義(一方):
xml:
<set name="propertyName" cascade="all" inverse="true">
? ? <key column="foreign_key_col"/>
? ? <one-to-many class="className"/>
</set>
annotation:
@OneToMany
@JoinColumn(name="foreignKeyName")
關系定義(多方):
xml:
<many-to-one name="propertyName" column="columnName" class="className"/>
annotation:
@ManyToOne()
@JoinColumn(name="foreignKeyName")
多對多關系:
應用場景:
不建議使用响驴,建議拆解成2個一對多的連接
關系定義(主控方):
xml:
<set name="propertyName" table="middle_table_name">
? ? <key column="columnName_master" />
? ? <many-to-many class="className" column="columnName_slave" />
</set>
annotation:
@ManyToMany?
@JoinTable(name="middle_table_name"),
joinColumns=@JoinColumn(name="columnName_master"),
inverseJoinColumns=@JoinColumn(name="columnName_slave")
關系定義(被控方):
xml:
<set name="propertyName" table="middle_table_name">
? ? <key column="columnName_slave" />
? ? <many-to-many class="className" column="columnName_master" />
</set>
annotation:
@ManyToMany(mappedBy="propertyName")
延遲加載(lazy load)
為了減少由于大量關聯(lián)信息引起的查詢性能負擔
對于集合屬性,通常采用延遲加載策略
lazy="true/false"
FetchType.EAGER(迫切加載)/FetchType.LAZY(延遲加載)
級聯(lián)設置(cascade)
all - 所有操作都執(zhí)行級聯(lián)操作
none - 所有操作都不執(zhí)行級聯(lián)操作
save-update - 僅保存和更新時執(zhí)行級聯(lián)操作
delete - 僅刪除時執(zhí)行級聯(lián)操作
控制設置(inverse)
是否將維護關系的權利交給對方
默認值為false撕蔼,可選為true
一對多關系中豁鲤,通常講"一"的一方設為true,即由"多"的一方來維護關系
Java Annotation中由mappedBy屬性替代
抓取策略(fetch)
抓取策略:當應用需要通過關聯(lián)關系獲得引用對象時鲸沮,如何獲得對象信息的策略
join - 通過連接的方式獲得引用對象信息琳骡,默認延遲加載為false
select - 通過產(chǎn)生select查詢的方式獲得引用對象信息,默認延遲加載為true
subselect(只允許查找多方"-tomany") - 通過子查詢獲得關聯(lián)對象的信息讼溺,默認延遲加載為true
batch(Annotation中已取消使用) - 通過給定的值楣号,批量查找關聯(lián)對象的信息,默認延遲加載為true怒坯。
例如:batch-size="5"炫狱,則對于10個關聯(lián)對象,會查詢2次
}