日期:2014-05-16 浏览次数:20507 次
<hibernate-mapping>
    <class name="modle.Customers" table="customers" >
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" not-null="true" />
        </property>
        <set name="orderses" inverse="true" cascade="save-update" >
            <key>
                <column name="customer_id"  />
            </key>
            <one-to-many class="modle.Orders" />
        </set>
       
    </class>
</hibernate-mapping>这是一对多,就是一个 Customers 对应 多个 order
下面是多对一的一方:
<hibernate-mapping>
    <class name="modle.Orders" table="orders" catalog="h_01">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <many-to-one name="customers" class="modle.Customers" fetch="select" lazy="false">
            <column name="customer_id"  />
        </many-to-one>
        <property name="orderName" type="java.lang.String">
            <column name="orderName" not-null="true" />
        </property>
    </class>
</hibernate-mapping>1、inverse 就是反向,是说这种关联关系是对对方控制的,就是many的一方。
inverse="true"2、lazy  就是是否延迟加载。就是我在需要的时候才去加载,不需要不去加载。
在session关掉后,我们就不能再加载了。
就是常见的: org.hibernate.LazyInitializationException
这时,我们把lazy设为false。
lazy有两种配置方法:
1) 在many-to-one 或 set 中配置:
<set name="orderses" inverse="true" cascade="save-update" lazy="true">
在one的一方,lazy有3个值:false,true,extra。 默认是true。
延迟加载有很大好处,可以节省sql语句。
在many的一方,lazy有3个值:false,proxy,no-proxy。 注意这里没有true的选项。
一般在查询many的一方时,也会查询one的一方。
2) 在class中配置 :
在class上的lazy只对普通属性起作用,什么set,list统统不起作用,所以set 之类的还要再写