set的使用
<set name="addresses" cascade="all">
?<!--key 是Address表的字段,最后要update Address表.personId = Person表.personId-->
?<key column="personId"? not-null="true"/>
?<one-to-many
???? class="com.jason.associations.one2many.unilateralism.one2many.Address"/>
</set>

<set name="addresses" table="PersonAddress" cascade="all">
????? <key column="personId"/>
????? <many-to-many column="addressId"
????????? unique="true"
????????? class="com.jason.associations.one2many.unilateralism.one2many.table.Address"/>
</set>



關聯表的使用
<join table="PersonAddress" optional="true">
?? <key column="personId" unique="true"/>
?? <many-to-one name="address"
?????? column="addressId"
?????? not-null="true"
?????? cascade="all"
?????? .../>
</join>

//set,Array,bag,map都行
<set name="addresses" table="PersonAddress" cascade="all">
???????<key column="personId"/>
?????? <many-to-many column="addressId"
???????????unique="true"
?????????? class="com.jason.associations.one2many.unilateralism.one2many.table.Address"/>
</set>


<map name="events" table="event">
???????? <key column="PERSON_ID"/>
?????????<index column="name" type="string"/>
?????????<element column="content" type="string"/>
?</map>?

<many-to-one name="address"
?? class="com.jason.associations.one2one.unilateralism.foreign.Address"??
?? unique="true"

?? column="addressId"
?? cascade="all"
?? not-null="true"/
>

<one-to-one name="person"
?? class="com.jason.associations.one2one.unilateralism.primary.Person"
?? constrained="true"/
>
???
1、都表示一對一?,many-to-one指定了對應的column(和column相關的屬性cascade,not-null...)
???????而one-to-one沒有對應的column,它主要用于id的generator class="foreign"中
2、同樣也適用于<many-to-many unique="true">和<one-to-many>



<one-to-many>
<many-to-one>
不管哪個,對應的表是這樣的,把one那張表的key,放到many對應的表中,相當于外鍵。




<one-to-?>

<set name="addresses" cascade="all">
?<!--key 是Address表的字段,最后要update Address表.personId = Person表.personId-->
?<key column="personId"? not-null="true"/>
?<one-to-many
???? class="com.jason.associations.one2many.unilateralism.one2many.Address"/>
</set>

<id name="id" column="addressId">
??? <generator class="foreign">
???<param name="property">person</param>
??</generator>
</id>
<one-to-one name="person"
??class="com.jason.associations.one2one.unilateralism.primary.Person"
??constrained="true"/>
??
<one-to-many>和<one-to-one>都沒有column屬性,因為one對應的那邊不需要相應的列,
那么如何保持關系呢?
1、最好不使用,
2、向上面那樣指定一下




column的位置
1、大多數時候在這個class對應的表中
2、在關聯表中
3、在指定的class對應的表中
例如:
<set name="addresses" cascade="all">
?<!--key 是Address表的字段,最后要update Address表.personId = Person表.personId-->
?<key column="personId"? not-null="true"/>
?<one-to-many
???? class="com.jason.associations.one2many.unilateralism.one2many.Address"/>
</set>??



unique
<many-to-?
??? unique="true"
??? ..."/>
unique是相對于前面的many


inverse

<class name="Address">
??? <id name="id" column="addressId">
??????? <generator class="native"/>
??? </id>
??? <join table="PersonAddress"
??????? inverse="true"
??????? optional="true">
??????? <key column="addressId"/>
??????? <many-to-one name="person"
??????????? column="personId"
??????????? not-null="true"/>
??? </join>
</class>
?????????1、為了更好地提高執行效率,需要將“多”的一端設為主控方,就是將關聯關系的維護工作交給“多”的一端。inverse="true" 說明主控表是Person表(Address表對面)inverse="false"本身,默認值:false

???2、inverse="true"可以出現在關聯的任意一端,即collection端或者join端。


Constrained : 約束,表明主控表的主鍵上是否存在一個外鍵(foreigh key)對其進行約束。


?property-ref:關聯類中用于與主控類相關聯的屬性名,默認為關聯類的主鍵屬性名


?lazy=false:被動方的記錄由hibernate負責記取,之后存放在主控方指定的?? Collection類型屬性中


?batch-size:采用延遲加載特征時,一次讀入的數據數昨


?