one2one
1、基于外鍵關(guān)聯(lián)的單向一對一關(guān)聯(lián)
?? 和單向多對一關(guān)聯(lián)幾乎是一樣的。唯一的不同就是單向一對一關(guān)聯(lián)中的外鍵字段具有唯一性約束。
?<class name="com.jason.associations.one2one.unilateralism.foreign.Person" table="Person">
??<id name="id" column="personId">
???<generator class="native"/>
??</id>
??<many-to-one name="address"
???class="com.jason.associations.one2one.unilateralism.foreign.Address"
???column="addressId"
????? unique="true"
????? cascade="all"
????? not-null="true"/>
?</class>
?
?<class name="com.jason.associations.one2one.unilateralism.foreign.Address" table="Address">
??<id name="id" column="addressId">
???<generator class="native"/>
??</id>
?</class>
?<!--
??create table Person ( personId bigint not null primary key, addressId bigint not null unique)
??create table Address ( addressId bigint not null primary key)
?-->
2、基于主鍵關(guān)聯(lián)的單向一對一關(guān)聯(lián)
?? 通常使用一個特定的id生成器。(請注意,在這個例子中我們掉換了關(guān)聯(lián)的方向。)
?<class name="com.jason.associations.one2one.unilateralism.primary.Person" table="Person">
??<id name="id" column="personId">
???<generator class="native"/>
??</id>
?</class>
?
?<class name="com.jason.associations.one2one.unilateralism.primary.Address" table="Address">
??<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"/>
?</class>
?<!--
??create table Person ( personId bigint not null primary key)
??create table Address ( addressId bigint not null primary key)??
??其中personId= addressId
?-->
3、基于連接表的單向一對一關(guān)聯(lián)非常少見,但也是可行的。
?<class name="com.jason.associations.one2one.unilateralism.table.Person" table="Person">
??<id name="id" column="personId">
???<generator class="native"/>
??</id>
????? <!--join 必須放在最下面-->
?????? <join table="PersonAddress" optional="true">
?????????? <key column="personId" unique="true"/>
?????????? <many-to-one name="address"
?????????????? column="addressId"
?????????????? not-null="true"
??????????? cascade="all"
?????????????? unique="true"/>
??????? </join>?
?</class>
?
?<class name="com.jason.associations.one2one.unilateralism.table.Address" table="Address">
??<id name="id" column="addressId">
??????? ?<generator class="native"/>
??</id>
?</class>
?<!--
??create table Person ( personId bigint not null primary key)
??create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )
??create table Address ( addressId bigint not null primary key)
?-->
4、對應(yīng)的雙向關(guān)聯(lián)
a、單向關(guān)聯(lián)和雙向關(guān)聯(lián)使用的表是一樣的
b、雙向關(guān)聯(lián)類中多了屬性
c、雙向關(guān)聯(lián)可以從任何一個對象開始操作(比如添加),而單向只能從特定的一方操作