<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent.Chan‘s Blog

    常用鏈接

    統計

    積分與排名

    網站

    最新評論

    Hibernate中實體對象與數據的映射方式

    總結了Hibernate中實體對象與數據的映射方式……圖文并茂,配置實例代碼,為david吃飽了撐著之大作。

    1 Entity's relation

    1.1 One to One

    一個對象的一個實例對應另一個對象的一個實例從數據庫角度描述,一個表中的一條記錄對應另外一個表中唯一一條記錄

    public class Image{
    private Long id;
    private String imgName;
    private Blog value; //to store binary of image
    ......
    }
    Image.hbm.xml
    <class name="Image" dynamic-update="true">
    <id...
    <property...
    </class>

    public class Product{
    private Long id;
    private String name;
    private double price;
    private Image photo;
    }
    <class name=...dynamic-update="true" lazy="true"
    <id...
    <property...
    <one-to-one name="photo" class="package.Image" cascade="all" outer-join="auto" constrained="false"/>
    </class>

    1.2 Many to One

    一個對象對應另一個對象的多個實例,從數據庫角度描述,是在一個數據表中的一條記錄對應另外一個數據表中對條記錄.

    public class PersonalCompute{
    private Long computerId;
    private String cpu;
    ......
    private Programmer owner;
    }
    <class name="Programmer" table="Programmer">
    <id...
    <property...
    </class>

    <class name="PersonalCompute" table="PCS">
    <id....
    <property...
    <many-to-one name="owner" column="programmerId" class="Programmer">
    </many-to-one>

    1.3 One to Many

    The same example as Many to One.But we stand at Programmer class's view point.
    public class Programmer{
    ...
    private Set computers = new HashSet();
    }

    <class name="Programmer" table="Programmer">
    <id...
    <property...
    <set name="computers" inverse="true"
    cascade="all">
    <key column="programmerId" />
    <one-to-many class="PersonalComputers">
    </one-to-many>
    </set>

    2 Collection

    2.1 Map

    <class name="Team">
    ...
    <map name="members">
    <key foreign-key="fk">
    <column name="teamNumber">
    </key>
    <index column="teamRole" type="string"/>
    <element column="name" ...
    </map>


    showcase:
    Team team1 = new Team();
    team1.setName(xx);
    team1.getMembers.put("index","content");
    ......
    sess.save...

    2.1.1 many-to-any

    2.1.2 One to many

    單單使用Map做存儲往往無法表達復雜的對象,如果要講對象 map進行映射:
    One Team,multi-members
    Public class Member{
    ...
    private Team team;
    }
    <class name="Team">
    ...
    <map name="members" inverse="false">
    <key column="team" foreign-key="fk"/>
    <index type="string" column="teamRole"/>
    <one-to-many class="Member"/>
    </map>
    <class name="member">
    <id...
    <property...
    <many-to-one name="team" />

    showcase:
    Team team = new Team();
    team.setName("xx");
    Member mem1 = new Member();
    mem1.setXX
    mem1.setXX
    Member mem2 = new Member();
    mem2.setXX
    mem2.setXX
    team.getMembers().put("xx",mem1);
    team.getMembers().put("xx2",mem2);

    2.1.3 many to many

    <class name="Team">
    <id
    <propery
    <map name="members" inverse="false" table="teamHasMembers">
    <key column="team" foreign-key="fk"/>
    <index type="string" column="teamRole"/>
    <many-to-many class="member" outer-join="auto">
    <column name="member"/>
    </many-to-many>
    </map>

    <class name="Member">
    <id
    <property
    <map name="teams" table="memberAtTeams">
    <key....

    teamRole is their common key of Map.
    Team

    id

    name

    2

    team2

    Member

    di

    name

    age

    1

    davy

    23

    memberAtTeams

    member

    team

    teamRole

    1

    2

    coach

    teamHasMembers

    team

    member

    teamRole

    2

    1

    coach

    2.1.4 Composite-index

    Index 可以是一個類。
    public class Position{
    private String role;
    private String scene;
    public Position()....
    getter...
    setter...
    }
    <class name="Team">
    <id...
    <property...
    <map name="members" inverse="false">
    <key column="team" foreign-key="fk"/>
    <composite-index class="Position">
    <key-property..
    <key-property...
    </composite-index>
    <one-to-many class="Member"/>
    </map>
    ...

    <class name="Member">
    <id...
    <property...
    <many-to-one name="team"/>
    </class>

    index-many-to-one

    index-many-to-many

    index-many-to-any

    2.1.5 composite-element

    <import class="Member"/>
    <class name="Team">
    <id...
    <property...
    <map name="members" table="teamMembers">
    <key column="teamId"/>
    <index...
    <composite-element class="Member">
    <parent name="parent"/>
    <property...
    <property...
    </composite-element>
    </map>

    2.2 Set

    <class name="Team">
    <..
    <set name="members" inverse="false">
    <key column="team" foreign-key="fk"/>
    <elemnet column="name" type="string"/>
    </set>

    2.2.1 one-to-many

    <set name="xx" column="">
    <key column="" foreign-key="fk"/>
    <one-to-many class="BB"/>
    </set>

    2.2.2 many-to-many

    <class name="Team">
    <id..
    <property...
    <set name="members" inverse="false" table="teamHasMembers">
    <key column="team" foreign-key="fk">
    <many-to-many class="Member" outer-join="auto">
    <column name="member"/>
    </set>
    </class>

    <class name="Member">
    <id..
    <property...
    <set name="members" inverse="true" table="memberAtTeams">
    <key column="member" foreign-key="fk">
    <many-to-many class="Member" outer-join="auto">
    <column name="team"/>
    </set>
    </class>

    2.2.3 many-to-any

    2.2.4 composite-element

    2.3 List

    <list name="members" inverse="false">
    <key column="team" foreign-key="fk"/>
    <index column="teamMember"/>
    <element column="name" type="string"/>
    </list>

    2.3.1 one-to-many

    2.3.2 many-to-many

    2.3.3 many-to-many

    2.3.4 composite-element

    2.4 Bag

    It can contains JDK's Collection and List interface type's object.

    2.5 idBag

    bag相比多出了collection-id屬性

    <ibdbag name="">
    <collection-id column="mbid" type="long">
    <generator class="hilo"/>
    </collection-id>
    <key..
    <element..
    </idbag>

    2.6 array

    public class Team{
    //...
    private String[] members;
    }

    <array name="members" inverse="false">
    <key column="team" foreign-key="fk"/>
    <index column="teamNumber"/>
    <element column="name" type="string"/>
    </array>

    3 Component

    <class name="Country">
    <id..
    <property...
    <component name="position">
    <property...
    </component>
    Public class Country{
    //..
    private Position position;
    }

    3.1 One-to-one

    3.2 many-to-one

    3.3 dynamic-component

    4 Dynamic class

    <dynamic-class entity-name="Country">
    <id name="id" type="long">
    <generator class="hilo"/>
    </id>
    <property name="name" column="NAME" type="string"/>
    </..

    4.1 One-to-one

    4.2 many-to-one

    5 Mapping type

    5.1 Java type to SQL type

    5.2 3.0 enmu

    5.3 user defined data type

    need implements org.hibernate.usertype.CompositeUserType or org.hibernate.usertype.UserType interface.

    6 Class Hierarchy's mapping

    6.1 Subclasses are saved in on Table

    6.1.1 discriminator

    Sapmle:

    Class AbstractParent{
    String id;
    /*important*/
    String discriminator
    }
    Class ChildA{
    String childA;
    }
    Class ChildB{
    String childB;
    }

    =========DB=========

    colum name

    data type

    memo

    id

    varchar


    childA

    varchar


    childB

    varchar


    class_type

    varchar

    used to identify subclass:A B

    ========mapping config file====
    <class name="AbstractParent" table="PARENT" abstract="true">
    <id...
    <discriminator column="CLASS_TYPE" type="string"/>
    <property......
    <subclass name="ChildA" discriminator-value="A">
    <property name="childA"/>
    </subclass>
    <subclass......

    id generator

    · increment

    · identity

    · sequence

    · hilo

    · seqhilo

    · uuid

    · guid

    · native

    · assigned

    · foreign

    composite id

    <composite-id>
    <key-property name=""/>
    <key-property name=""/>
    </composite-id>

    6.2 Subclasses are saved in separated Table

    不為父類Container建立映射文件 BoxBottle的映射文件也如沒有關系一樣普通的建立 但是對Container取得操作

    List pcs = sess.createQuery("from com.be.david.Container").list();
    if(!cs.isEmpty()){
    ...
    }
    會將BoxContainer數據都取出來 這是Hibernate默認隱式完成的

    6.3 Parent Class and Subclasses are saved in separated Table

    <class name="Container" table="CONTAINER">
    <id...
    <property...
    <joined-subclass name="Box" table="CONTAINER_BOX">
    <key column="ContainerId"/>
    <property...
    </joined-subclass>
    <joined-subclass name="Bottle" table="CONTAINER_BOTTLE">
    <key...
    <property...
    </joined-subclass>
    </class>

    6.4 One PO multi-table

    public Class Person{
    public String id;
    public String name;
    public String sex;
    public String address;
    public String city;
    public String zipcode;
    }
    we wanna save address related attributes(blue ones).Use join
    <class name="Person" table="PERSON">
    <id...
    <property ...
    <join table="ADDRESS">
    <key column="addressID"/>
     <property name="address"/>
     ...
     </join>
    </class>

    6.5 Class A Class B not inherited from Parent Class

    6.5.1 subselect

    We can use subselct to make ChildA and ChildB standalone.So how can we get all data including ChindA and ChildB?

    <class name="ChildA" table="parent">
    <id...
    <property...
    </class>
    <class name="ChildB" table="parent">
    <id...
    <property...
    </class>
    <class name="Parent" mutable="false">
    <subselect>
    select * from ChildA
    union
    select * from ChildB
    </subselect>
    <sychronize table="ChildA"/>
    <sychronize table="ChildB"/>
    <id...
    <property...
    </class>

    posted on 2006-02-22 20:14 Vincent.Chen 閱讀(469) 評論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: 99久久婷婷免费国产综合精品| APP在线免费观看视频| 一本色道久久综合亚洲精品高清| a级精品九九九大片免费看| 亚洲免费黄色网址| 免费一级一片一毛片| 99精品一区二区免费视频| 亚洲国产成人精品无码区二本 | 在线观看特色大片免费网站| 亚洲色图综合网站| 四虎影视永久免费观看地址| 野花香高清视频在线观看免费| 国产精品亚洲四区在线观看| 国产亚洲老熟女视频| 中国在线观看免费高清完整版| 免费看一级毛片在线观看精品视频| 亚洲精品人成在线观看| 国产免费人成视频在线观看| 免费不卡在线观看AV| 尤物视频在线免费观看| 亚洲一区二区影视| 亚洲AV无码一区东京热久久 | 亚洲欧洲日产国码无码网站| 日本亚洲免费无线码| 久久久久久久久久免免费精品| 456亚洲人成影院在线观| 亚洲av无码av制服另类专区| 国产免费爽爽视频免费可以看| 亚洲精品视频免费看| 中文字幕在线免费视频| 亚洲AV无码一区二区一二区| 亚洲色av性色在线观无码| 国产精品亚洲二区在线观看| eeuss影院免费92242部| 亚洲日韩精品国产一区二区三区| 亚洲成年人在线观看| 美腿丝袜亚洲综合| 亚洲裸男gv网站| 日本一区免费电影| 欧洲黑大粗无码免费| 精品无码国产污污污免费网站|