eclipse 环境下整合 struts2+spring+hibernate 开发web应用常见问题及解答
1. org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():
2. org.hibernate.exception.SQLGrammarException: could not update
3. com.microsoft.sqlserver.jdbc.SQLServerException: 當 IDENTITY_INSERT 設置為 OFF 時,不能為表 'COMPONENT' 中的標識列插入顯式值。
4. 如何讓struts配置文件ApplicationResources.properties生效
5. eclipse java.lang.OutOfMemoryError: Java heap space 解決方案
6. Spring2 struts2 hibernate3 后臺測試時報的錯 Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.解決方案
7. Oracle Database Error ORA-02289 ORA-02289 sequence does not exist
8. org.hibernate.PropertyValueException: not-null property references a null or transient value.?
9. EJB異常:identifier of an instance of xx was altered from x to x
1. org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()
異常原因:
<id>元素配置不正確,<id>元素缺少其子元素<generator></generator>的配置。
解決方法:
<id>元素映射了相應數據庫表的主鍵字段,對其子元素<generator class="">,其中class的取值可以為increment、identity、sequence、hilo、native……等,更多的可參考hibernate參考文檔,一般取其值為native 功能是適應本地數據庫。
exp:
<hibernate-mapping>
??? <class name="com.fqf.Vipdata" table="vipdata" catalog="test">
??????? <id name="vipId" type="java.lang.Integer">
??????????? <column name="vipId" />
??????????? <generator class="assigned" />
??????? </id>
??????? <property name="vipName" type="java.lang.String">
??????????? <column name="vipName" length="20" not-null="true" />
??????? </property>
??????? <property name="vipTitle" type="java.lang.String">
??????????? <column name="vipTitle" length="20" not-null="true" />
??????? </property>
??? </class>
</hibernate-mapping>
看看數據庫表中的 id 是不是自增長類型,如果是自增長類型,把<generator class="assigned" />中assigned改為identity
(vipId的類型為自增長)
2. org.hibernate.exception.SQLGrammarException: could not update
錯誤原因:
xxx.hbm.xml與數據庫表字段類型不匹配。
解決方法:
重新反轉生成hbm文件。或者手動修改相應字段為匹配類型。
3. com.microsoft.sqlserver.jdbc.SQLServerException:
4. 如何讓struts配置文件ApplicationResources.properties生效
在src目錄下添加文件struts.properties文件,并在其中書寫一行
struts.custom.i18n.resources=com.comp.struts.resources.ApplicationResources
重啟tomcat,即可生效
國際化將文件轉換為二進制方法:
native2ascii -encoding UTF-8 ApplicationResources.properties ApplicationResources_zh_CN.properties
參考文獻:
ssh之struts第一篇:struts國際化:http://blog.csdn.net/rookieStudent/archive/2010/03/21/5401516.aspx
?
5. eclipse java.lang.OutOfMemoryError: Java heap space 解決方案
?eclipse java.lang.OutOfMemoryError: Java heap space 解決方案2008年11月24日 星期一 下午 01:57eclipse 有啟動參數里設置jvm大小,因為eclipse運行時自己也需要jvm,所以eclipse.ini里設置的jvm大小不是具體某個程序運行時所用jvm的大小,這和具體程序運行的jvm大小無關。
那么怎么才能設置某個程序的jvm大小呢(當然控制臺運行的話不會存在這個問題,如:java -Xms256m -Xmx1024m classname,這樣就可以把當前程序的jvm大小給設定)?
因為eclipse里默認的一個程序的jvm配置為:-Xms8m -Xmx128m,所以我們的處理耗內存比較大時需要手動調整一下,以便不會內存溢出。具體的設置方法為:
選中被運行的類,點擊菜單‘run->run...’,選擇(x)=Argument標簽頁下的vm arguments框里輸入 -Xmx512m, 保存運行就ok了
因為我使用的是tomcat服務器,可以在tomcat configure 的java標簽下面直接進行修改。修改方式如下:
打開 configure tomcat,在 Java 選項卡中,下方,會有
Inital memory Pool:??
Maximum memory Pool:
Thread stack size:
三個輸入框,在這里即可不用做上面的操作,直接配置內存大小,只需要設置
Inital memory Pool 為 256
Maximum memory Pool 為 512
點擊確定后,重啟tomcat 生效。
但這種方法只能作用于手動啟動tomcat,使用eclipse啟動時還是會報錯。
在eclipse中配置java內存的啟動參數,要采用下面的方法:
A.windows->preference->java->instal jres->edit,增加參數:-Xms256m -Xmx512m
或者
B.windows->preferences..->tomcat->jvm..->jvm文本框里,添加-Xms256m -Xmx512m
如果使用myeclipse,
窗口->首選項->MyEcliipse->Application Servers->Tomcat->Tomcat5.x->JDK->Optional Java VM arguments中填寫一下內容。
-Xms128m -Xmx256m
-Dcom.sun.management.jmxremote=true
?參考文獻:
如何修改tomcat內存大小:http://edu.codepub.com/2010/0327/21418.php
增加eclipse啟動的Tomcat內存的方法: http://wallimn.javaeye.com/blog/693158
??
6. Spring2 struts2? hibernate3 后臺測試時報的錯 Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter. <init> 解決方案
因為cglib 包和asm包沖突
開始用的cglib包是cglib-2.1.3.jar? ,后來換了一個cglib-nodep-2.2.jar才測試通過.
7. Oracle Database Error ORA-02289 ORA-02289 sequence does not exist
表示系統未找到相應的sequence,有以下兩種可能:
(1)數據庫訪問用戶的權限不夠,應該更換用戶或增加權限以訪問用戶。
(2)hibernate 映射文件配置不正確,映射文件中的id采用oracle自動生成時需要采用native方式,若使用hibernate時采用sequence方式。hibernate會默認查找"hibernate_sequence"這一序列。xml映射文件中的子元素generator來說明主鍵的產生方式,此處指定的是“native”,表示根據數據庫來選擇,比如,對于Oracle數據庫,它會去尋找一個sequence(默認情況下,它會去尋找一個名為“hibernate_sequence”的sequence),我們可以用參數param來指定一個sequence。而property用來指定Student.java類中的屬性和Student數據庫表之間的對應關系,以及各個字段的數據類型。在這個例子中,我們指定的數據類型是Java語言中的數據類型(此時需要指定引用類型數據),我們也可以使用Hibernate中自定義的數據類型,限于篇幅,在本文中不一一講解。
?
8. ?org.hibernate.PropertyValueException: not-null property references a null or transient value.
表示數據庫的非空字段映射到本地的可為空的字段中。檢查是否沒有給非空字段賦值。
?
9. EJB異常:identifier of an instance of?xx was altered from?x to x請檢查Role類的主鍵屬性是否是封裝類型。例如:Integer,Long ……。不能是int,long等數據類型。
當 IDENTITY_INSERT 設置為 OFF 時,不能為表 'COMPONENT' 中的標識列插入顯式值分析:也許你的id是這樣配置的:
<id name="id" type="integer">
??????????? <column name="id" />
??????????? <generator class="increment" />
</id>
increment是由Hibernate自動以自增的方式生成主鍵
identity是由底層數據庫生成的標識符
當數據庫中的ID為自動增長的時候采用increment當然會報“無法顯示為主鍵插入值”
把主鍵生成方式改為identity或者你的操作表的主鍵沒有被設置為自動增長。
轉載于:https://www.cnblogs.com/destimarve/archive/2010/06/23/ssh2.html
總結
以上是生活随笔為你收集整理的eclipse 环境下整合 struts2+spring+hibernate 开发web应用常见问题及解答的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 笔记一
- 下一篇: 关于ibatis.net 和 Nhibe