配置多对一的关系时拿emp(员工)多表和dept(部门表)一举例:
1、在emp()中配置dept的属性
class emp{
private Dept dept;
}
2、在emp映射表 emp.hbm.xml中定义<many-to-one>元素,表示参照关系
<many-to-one name="dept" class="Dept" column="dept_id">
<many-to-one>有延迟加载和非延迟加载,这关乎到sql语句执行一条还是两条。
建议使用<many-to-one lazy="proxy" fetch="joint">这样表示延迟加载并且sql语句合并。
配置一对多的关系时拿order(订单)一和item(订单明细)多举例:
1、在order中配置items属性
class order{
Set<Item> items;
}
2、在配置文件(order.hbm.xml)中配置订单详情的基本信息
<set name="items" fetch="joint" inverse="true" lazy="false">
<key column="order_id" casecade="all-delete-orphan"/>//级联删除,更新,查询等……
<one-to-many class="Item"/>
</set>
如果想获取订单中有几条记录,可以在order.hbm.xml中加入这样的配置信息
<properties name="itemnum" type="integer" formula="(select count(*) from tbl_order o where o.itemid=tid)">
配置多对多关系时拿学生student和成就souce表举例:<many-to-many>
1、基本配置
在对象中,定义另一方对象的集合属性
class student {
private Set<souce> souces;
}
class souce{
private Set<student> students;
}
在student.hbm.xml中配置如下:
<set name="souces" table="tbl_souce">
<key column="student_id">
<many-to-many class="Souce" column="souce_id">
</set>
继承关系映射配置:
1、继承关系映射到多表:
class Product;
clss Book extends Product;
class Computer extends Product;
t_product(t_id);
t_book(t_product_id);
t_computer(t_product_id);
配置:
<class>
...
<joined-subclass name="" table="">
<key column="" name="t_product_id"/>
<property .../>
</joined-subclass>
</class>
2、继承关系映射到一张表:
class Question;
class ChoiceQuestion extends Question;
class EssayQuestion extends Question;
t_question(t_id,t_type,....);
配置:
<class name="Question" ...>
<discriminator type="string" column="t_type" />
<subclass name="ChoiceQuestion" discriminator-value="c">
<property name=""></property>
</subclass>
<subclass name="EssayQuestion" discriminator-value="e">
<property name=""></property>
</subclass>
</class>
one-to-many(list)
有这样的需求,一个队伍(team)里有很多队员(person) 要求我们有顺序的列出队员
class team{
private List<Person> persons;
}
class person{
}
t_team(t_id,...,)
t_person(p_id,t_team_id,t_turn,...,)
在team.hbm.xml中加入:
<list name="persons" cascade="all" >
<key column="t_team_id" ></key>
<list-index column="t_turn" base="0"></list-index>
<one-to-many class="Person"/>
</list>
注:它和Set的<one-to-many>一样,但是list中不需要inverse="true".如果出现暂态异常,则在多的一方反向关联少的
一方,即在多的一方加入 private team t;提供get set方法,然后修改配置文件信息
映射 Component
<component name="address" class="Address">
<property name="street" type="string"></property>
<property name="city" type="string"></property>
</component>
1、在emp()中配置dept的属性
class emp{
private Dept dept;
}
2、在emp映射表 emp.hbm.xml中定义<many-to-one>元素,表示参照关系
<many-to-one name="dept" class="Dept" column="dept_id">
<many-to-one>有延迟加载和非延迟加载,这关乎到sql语句执行一条还是两条。
建议使用<many-to-one lazy="proxy" fetch="joint">这样表示延迟加载并且sql语句合并。
配置一对多的关系时拿order(订单)一和item(订单明细)多举例:
1、在order中配置items属性
class order{
Set<Item> items;
}
2、在配置文件(order.hbm.xml)中配置订单详情的基本信息
<set name="items" fetch="joint" inverse="true" lazy="false">
<key column="order_id" casecade="all-delete-orphan"/>//级联删除,更新,查询等……
<one-to-many class="Item"/>
</set>
如果想获取订单中有几条记录,可以在order.hbm.xml中加入这样的配置信息
<properties name="itemnum" type="integer" formula="(select count(*) from tbl_order o where o.itemid=tid)">
配置多对多关系时拿学生student和成就souce表举例:<many-to-many>
1、基本配置
在对象中,定义另一方对象的集合属性
class student {
private Set<souce> souces;
}
class souce{
private Set<student> students;
}
在student.hbm.xml中配置如下:
<set name="souces" table="tbl_souce">
<key column="student_id">
<many-to-many class="Souce" column="souce_id">
</set>
继承关系映射配置:
1、继承关系映射到多表:
class Product;
clss Book extends Product;
class Computer extends Product;
t_product(t_id);
t_book(t_product_id);
t_computer(t_product_id);
配置:
<class>
...
<joined-subclass name="" table="">
<key column="" name="t_product_id"/>
<property .../>
</joined-subclass>
</class>
2、继承关系映射到一张表:
class Question;
class ChoiceQuestion extends Question;
class EssayQuestion extends Question;
t_question(t_id,t_type,....);
配置:
<class name="Question" ...>
<discriminator type="string" column="t_type" />
<subclass name="ChoiceQuestion" discriminator-value="c">
<property name=""></property>
</subclass>
<subclass name="EssayQuestion" discriminator-value="e">
<property name=""></property>
</subclass>
</class>
one-to-many(list)
有这样的需求,一个队伍(team)里有很多队员(person) 要求我们有顺序的列出队员
class team{
private List<Person> persons;
}
class person{
}
t_team(t_id,...,)
t_person(p_id,t_team_id,t_turn,...,)
在team.hbm.xml中加入:
<list name="persons" cascade="all" >
<key column="t_team_id" ></key>
<list-index column="t_turn" base="0"></list-index>
<one-to-many class="Person"/>
</list>
注:它和Set的<one-to-many>一样,但是list中不需要inverse="true".如果出现暂态异常,则在多的一方反向关联少的
一方,即在多的一方加入 private team t;提供get set方法,然后修改配置文件信息
映射 Component
<component name="address" class="Address">
<property name="street" type="string"></property>
<property name="city" type="string"></property>
</component>