您的位置:首页 > 运维架构

hibernate映射文件

2012-03-22 16:00 134 查看
一. 枚举映射:

<type name="org.hibernate.type.EnumType">

      <param name="enumClass">com.cn.Gender</param>

      <param name="type">12</param>      12则以String类型显示

</type>

二. 联合主键映射:

<hibernate-mapping package="com.cn"><!-- 联合主键的映射用composite-id来写 -->

    <class name="Person">

        <composite-id name="unitedKey">

            <key-property name="firstName" column="first_name" length="12"/>

            <key-property name="lastName" column="last_name" length="12"/>

        </composite-id>

        <property name="ss" length="12"/>

    </class>

</hibernate-mapping>

三. 子类继承父类:

public class Employee {

        private int id;

        private String name;

        get和set方法......

}

public class Seller extends Employee {

    private String sell;

    get和set方法......

}

public class Skiller extends Employee {

    private String skill;

    get和set方法......

}

子类继承父类的配置文件中有三种写法:

1. 子类和父类映射全部映射到一张表上,利用鉴别器来区分是哪个子类。在子类属性中会出现空属性(这些属性是其他子类上的)。

    sql语句执行效率高(因为执行的sql是在同一张表上),但是映射有点乱,且子类会出现空的属性。

<hibernate-mapping package="com.cn1">

    <class name="Employee" discriminator-value="0">

        <id name="id">

            <generator class="native" />

        </id>

        <properties name="name" unique="true"/>

        <discriminator column="type" type="String"/>

           <subclass name="Seller" discriminator-value="1">

               <property name="sell"/>

           </subclass>

           <subclass name="Skiller" discriminator-value="2">

               <property name="skill"/>

           </subclass>

    </class>

</hibernate-mapping>

2.子类单独映射到各自的一张表中,然后利用joined-subclass连接起来。sql语句执行效率低,但是各表映射清晰。

    这些生成的映射到的表可以看做像是多对多管系统生成的中间表那样。

<hibernate-mapping package="com.cn2">

    <class name="Employee">

        <id name="id">

            <generator class="native" />

        </id>

        <properties name="name" unique="true"/>

        <joined-subclass name="Seller" table="seller">

            <key column="emp_id"/>

            <property name="sell"/>

        </joined-subclass>

        <joined-subclass name="Skiller" table="skiller">

             <key column="emp_id"/>

             <property name="skill"/>

        </joined-subclass>     

    </class>

</hibernate-mapping>

3.适用情况:某一子类和父类映射到同一张表,另外的子类和父类映射的不是同一张表。

    本例中Seller和父类映射在一起,Skiller在自己单独的映射表中

    结合了第一种和第二种继承映射的优点。执行较快,结构换算清晰。

<hibernate-mapping package="com.cn3">

    <class name="Employee" discriminator-value="0">

        <id name="id">

            <generator class="native" />

        </id>

        <properties name="name" unique="true"/>

        <discriminator column="type" type="String"/>

           <subclass name="Seller" discriminator-value="1">

               <property name="sell"/>

           </subclass>

           <subclass name="Skiller">

               <join table="skiller">

                   <key column="emp_id">

                   <property name="skill"/>

               </join>

           </subclass>

    </class>

</hibernate-mapping>

hibernate配置文件中schema的值对应oracle的用户名

catalog的值指定后会改变原数据库中的表名,成为:原有表名+catalog的值  

hibernate中集合类型:

1.set:

<set name="emps">

       <keycolumn="depart_id"/>

       <one-to-manyclass="Employee"/>

</set>

2.list:

<list name="emps">

       <keycolumn="depart_id"/>

       <one-to-manyclass="Employee"/>

       <list-indexcolumn="order_id"/>

</list>

or

<bag name="emps">

       <keycolumn="depart_id"/>

       <one-to-manyclass="Employee"/>

</bag>

3.map:

<map name="emps">

       <keycolumn="depart_id"/>

       <map-keytype="String" class="name"/>

       <one-to-manyclass="Employee"/>

</map>

4.数组集合:

 

hibernate中inverse:

hibernate 中关系维护中默认由多的一方维护关系(inverse=”false”),一得一方不维护(inverse=”true”)。这样减少了update语句也就减少了垃圾sql执行代码,提高了性能。

hibernate配置文件中hibernate.hbm2ddl.auto的值:

create:     先drop表再create (默认)

create-drop:也表示创建,不过在系统关闭之前执行一下drop;

update:    加载hibernate时自动更新数据库结构

validate:    加载hibernate时候自动检查数据库表结构是否发生改变,如果改变就抛出异常,不会更新。

hibernate配置中cascade的值:

none:对任何关系不进行级联(默认)

all: 对所有关系进行级联(即:save-update和delete)

save-update: 在进行save和update操作时进行级联

delete:在进行delete时进行级联

all-delete-orphan:当一个对象在关系图中成为孤儿时,删除该节点

lazy的值:

proxy:使用代理(3.0之后有的,默认)

true:是用懒加载

false:不使用懒加载

fetch(什么方式抓取数据)的值:

select:对相关的每张表进行select查询(默认)

join:采用连接表的方式一次性查询,效率较高
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息