日期:2014-05-16 浏览次数:20447 次
<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 之类的还要再写