一:实体对象的加载
比如说:用户和订单的关系是一对多, 虽然它们有关联,但是默认是延迟加载 Lazy=“true”,最终得到的是代理对象,如果要访问代理对象的属性的话,则会抛出异常,
解决方法:left join fetch 迫切抓取连接
select u from User u left join fetch Order o ;
二:普通属性
默认是:lazy=“false”
如果要改为延迟 方法较麻烦
三:集合对象
set list map 默认 Lazy =“true”
1:List
<list name="diarys" table="petDiary" cascade="all" inverse="true">
<key column="petId"></key>
<index column="listindex"></index>
<one-to-many class="com.lovo.po.PetDiary"/>
</list>
2:set
<set name="orders"
table="t_order"
cascade="all"
inverse="true"
lazy="true"
>
<key column="fk_customer_id"></key>
<one-to-many class="Order"/>
</set>
3:map
private Map school=new HashMap();
public Map getSchool() {
return school;
}
public void setSchool(Map school) {
this.school=school;
}
private Map school=new HashMap();
public Map getSchool() {
return school;
}
public void setSchool(Map school) {
this.school=school;
}
Xml代码
<map name="school" table="schools">
<key column="pid" not-null="true" />
<map-key type="string" column="indet"/>
<element type="float" column="score"/>
</map>
key 子元素用于映射外键列,而 map-key 子元素则用于映射 Map 集合的 Key 。
分享到:
评论