2011年7月14日 星期四
Framework 樣板之Struts2 Annotation + Spring3.1 + Hibernate3.6 JPA (四)
版本:Struts2.2.3 + Spring3.1 + Hibernate3.6
包含:Displaytag、Tiles 、 OpenSessionInView 及 連接DB
資料庫:MS SQL2005
Schema:在/BlankS2SH/WebContent/dev/sql.txt,為了方便說明,僅用兩張Table。
2011年6月30日 星期四
Framework 樣板之Struts1 + Spring3 + Hibernate3 JPA教學(二)
版本:Struts1.3.10 + Spring3.1 + Hibernate3.6 JPA
包含:Displaytag、Tiles 、 OpenSessionInView 及 連接DB
資料庫:MS SQL2005
Schema:在/HibernateJPA/WebContent/dev/sql.txt,為了方便說明,僅用兩張Table。
2011年6月17日 星期五
Framework 樣板之Struts1 + Spring3 + Hibernate3教學(一)
包含:Displaytag、Tiles 、 OpenSessionInView 及 連接DB
資料庫:MS SQL2005
Schema:在\BlankSSH\dev\sql.txt,為了方便說明,僅用兩張Table。
2011年3月31日 星期四
hibernate升級至3.6
先到官方http://sourceforge.net/projects/hibernate/files/hibernate3/下載jar檔
裡面包含了所有需要用到的jar
要替換的jar有
hibernate3.jar
antlr-2.7.6.jar(舊版請移除)
新增加的jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
裡面包含了所有需要用到的jar
要替換的jar有
hibernate3.jar
antlr-2.7.6.jar(舊版請移除)
新增加的jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
2010年12月1日 星期三
Transaction manager教學
原因:使用OpenSessionInViewFilter時,session被設定為readOnly。
錯誤訊息:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
解決方式:
1. 增加TransactionManager.xml,如下xml。
其中在*ServiceImpl.java中的method名稱開頭為delete, save及merge,才可被與許存取DB。
2. 在web.xml加上TransactionManager.xml路徑
錯誤訊息:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
解決方式:
1. 增加TransactionManager.xml,如下xml。
其中在*ServiceImpl.java中的method名稱開頭為delete, save及merge,才可被與許存取DB。
2. 在web.xml加上TransactionManager.xml路徑
2010年11月18日 星期四
OpenSessionInViewFilter教學
如果沒有使用OpenSessionInViewFilter,Session會在transaction結束後關閉。
若有使用則會把一個Hibernate Session和一次完整的request過程對應的thread相綁定,使session在request的整個期間都可以使用。當View層邏輯完成後(如:在jsp用EL取關聯對象),才會通過Filter的doFilter方法自動關閉session。但是之後每一次request中的所有hibernate操作,都被當成同一個session並且被改成readOnly,所以將無法進行save,merge和delete的動作。這時就需要用transaction manager。
若有使用則會把一個Hibernate Session和一次完整的request過程對應的thread相綁定,使session在request的整個期間都可以使用。當View層邏輯完成後(如:在jsp用EL取關聯對象),才會通過Filter的doFilter方法自動關閉session。但是之後每一次request中的所有hibernate操作,都被當成同一個session並且被改成readOnly,所以將無法進行save,merge和delete的動作。這時就需要用transaction manager。
2010年11月5日 星期五
SSH回填至頁面
原因:
通常在做修改這個功能,需要將原有資料回填至欄位中
解決方式:
1. 在action中直接回傳To,jsp用EL回填
程式碼量:中
維護性:高
缺:若有關連的table,用EL取關連表的欄位,會有延遲加載(Lazy Load)的問題
2. 用ajax撈回資料,在用jquery填入欄位中
程式碼量:多
維護性:中
優:不用作form post
缺:要在action組字串、xml或JSON,再用jquery回填至個欄位
3. 在action中set ActionFrom,會自動回填
程式碼量:少
維護性:低
通常在做修改這個功能,需要將原有資料回填至欄位中
解決方式:
1. 在action中直接回傳To,jsp用EL回填
程式碼量:中
維護性:高
缺:若有關連的table,用EL取關連表的欄位,會有延遲加載(Lazy Load)的問題
2. 用ajax撈回資料,在用jquery填入欄位中
程式碼量:多
維護性:中
優:不用作form post
缺:要在action組字串、xml或JSON,再用jquery回填至個欄位
3. 在action中set ActionFrom,會自動回填
程式碼量:少
維護性:低
SSH延遲加載(Lazy Load)的問題
錯誤訊息:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
訂閱:
文章 (Atom)