1.hbm.xml描述
EmylinkUpcode.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"<hibernate-mapping package="hbm">
<class name="EmylinkUpcode" table="emylink_upcode">
<id
name="id" type="integer" column="plink_code"
>
<generator class="org.hibernate.id.IncrementGenerator"/>
</id>
<property
name="account"
column="account"
type="string"
not-null="true"
length="20"
/>
<property
name="plinkName"
column="plink_name"
type="string"
not-null="true"
length="50"
/>
<property
name="plinkExplain"
column="plink_explain"
type="string"
not-null="false"
length="100"
/>
<property
name="typeCode"
column="type_code"
type="string"
not-null="false"
length="8"
/>
<set name="emylinkUlinks" inverse="true" lazy="true" cascade="all">
<key column="plink_code"/>
<one-to-many class="EmylinkUlink"/>
</set>
</class>
</hibernate-mapping>







EmylinkUlink.hbm.xml
2.POJO對象
EmylinkUpcode.java














EmylinkUlink.java


















通過EmylinkUpcode加載EmylinkUlink(注意EmylinkUpcode.hbm.xml中聲明了延遲加載)
Query q = session.createQuery("from EmylinkUpcode where account='derek'");
List l = q.list();
EmylinkUpcode eu = (EmylinkUpcode)l.get(0);
System.out.println(eu.getPlinkName());
//Hibernate.initialize(eu.getEmylinkUlinks());//當延遲加載lazy=true時,強制加載及聯對象
Set ul = eu.getEmylinkUlinks();
Iterator<EmylinkUlink> it = ul.iterator();//lazy=true并且不使用強制加載,則此時才真真及聯加載
while(it.hasNext()){
System.out.println(it.next().getLinkName());
}
EmylinkSessionFactory.closeSession();
* 延遲加載
如果lazy=true(延遲加載), 加載EmylinkUpcode時,hibernate不會立即加載EmylinkUlink,只有當(Iterator<EmylinkUlink> it = ul.iterator();)執行時,hibernate才加載EmylinkUlink實例; 如果在加載前就關閉session,則報異常LazyInitializationException ; 可以使用Hibernate.initialize(Object o)強制及聯加載
*J2SE5.0的泛型
this.emylinkUlinks = emylinkUlinks;
}
while(it.hasNext()){
EmylinkUlink el = it.next();//無需進行強制類型轉換
System.out.println(el.getLinkName());
}
emylinkUlinks集合中只能存放EmylinkUlink對象,從集合中獲取對象無需再類型轉換
struts+spring+hibernate關于hibernate中lazy="true"的問題。web.xml中用
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
它的原理就是:打開頁面的時候打開session,一直到頁面裝載完畢才關閉session,這樣就解決了lazy="true"時session is closed的問題。
關于OpenSessionInViewFilter 延遲加載失效問題 http://www.javaeye.com/topic/15057
OpenSessionInView的效率問題 http://www.javaeye.com/topic/17501