在學習spring過程中遇見了種種不同的異常錯誤,這裡做了一下總結,希望遇見類似錯誤的同學們共勉一下。
1. 錯誤一
Error creating bean with name 'helloServiceImpl' defined in class path resource [spring-service.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'helloDao' of bean class [www.csdn.spring.service.impl.HelloServiceImpl]: Bean property 'helloDao' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'helloDao' of bean class
這類錯誤是:一般都是創建了一個dao的spring文件比如spring-dao有創建了一 個service的spring文件,在spring-service.xml中引用dao的中定義的id名,導致的錯誤,疏忽是:寫service實現類的時 候忘記了寫對應dao的setter方法,即所謂的依賴注入
比如:
private HelloDao helloDao;
//set依賴 注入很重要,不寫會報錯,不能讀寫helloDao這一屬性
publicvoid setHelloDao(HelloDao helloDao) {
System.out
.println("控制反轉:應用程序本身不在負責創建helloDao對象,而是由spring容器負責 創建、管理、維護,這樣控制權轉移,稱為反轉。"
+ "可以通過依賴注入方式注入該HelloDao對象 ");
this.helloDao = helloDao;
}
2. 錯誤二
Configuration problem: Failed to import bean definitions from relative location [spring-dao.xml]Offending resource: class path resource [spring.xml]; nested exception is org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 9 in XML document from class path resource [spring-dao.xml] is invalid; nested exception is org.xml.sax.SAXParseException: Open quote is expected for attribute "{1}" associated with an element type "scope".
Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 9 in XML document from class path resource [spring-dao.xml] is invalid; nested exception is org.xml.sax.SAXParseException: Open quote is expected for
Caused by: org.xml.sax.SAXParseException: Open quote is expected for attribute "{1} " associated with an element type "scope".
這種錯誤是馬虎的錯誤,在對應的spring的配置文 件中,bean標簽的scope屬性忘了加引號,在配置文件中國不會報錯,但是在運行的時候就會出這樣的錯,一般導致錯誤的 原因是復制的時候疏忽了引號,直接將原來的引號覆蓋了,導致了最後該屬性沒有引號。
<bean id="helloDaoImpl" class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope="prototype"></bean>
錯誤的寫成:
bean id="helloDaoImpl" class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope=prototype></bean>
3. 錯誤 三
No bean named 'helloServiceImp' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition
這種報錯但是沒 有Caused by語句的錯誤一般都是使用的時候單詞寫錯了,這裡寫錯的地方是在java類中,類中引用id的時候寫錯了單詞; 比如這裡的錯,注意下面的紅色文字:
HelloService helloService2 = (HelloService) context.getBean ("helloServiceImp",HelloServiceImpl.class);
<bean id="helloServiceImpl" class="www.csdn.spring.service.impl.HelloServiceImpl" scope="singleton" lazy- init="false">
<property name="helloDao" ref="helloDaoImpl" />
</bean>
眼尖的哥們估計都看出來了這兩個單詞寫的不一樣,獲 取bean的方法中引用的id少寫了一個“i”,導致spring容器在讀取的時候不能識別。以後注意細心就好。
4. 錯誤 四
Error creating bean with name 'helloServiceImpl' defined in class path resource [spring- service.xml]: Cannot resolve reference to bean 'helloDaoImp' while setting bean property 'helloDao'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'helloDaoImp' is defined
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'helloDaoImp' is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition
這種也是單詞寫 錯的情況,與上面不同的是這種情況給出了Caused by語句,讓你更清楚錯誤發生的原因,英文還差不多的哥們或者有一定 編程經驗的人員一看Caused by語句就應該能判斷出什麼錯誤;這裡錯誤原因明顯才、指出每一個名字為 'helloDaoImp'的bean,或名字為'helloDaoImp'的bean未定義,這種錯也好好找,一般都是互相引用的 spring配置文件馬虎出的錯,下面一個例子說明:比如spring-service.xml引用spring-dao的時候,還是如上面說的一樣, 重點再紅色字體
Service配置文件中這麼寫:
<bean id="helloServiceImpl" class="www.csdn.spring.service.impl.HelloServiceImpl" scope="singleton" lazy- init="false">
<property name="helloDao" ref="helloDaoImp" />
</bean>
但是dao配置文件中卻這麼寫:
bean id="helloDaoImpl" class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope="prototype"></bean>
寫到這大家就清楚了吧,與上一個錯誤基本上一樣,都是單詞寫錯的錯誤,只不過不同的是上一個錯誤是在java類中 引用id的時候寫錯單詞出的錯,而這一個錯誤是在spring配置文件中國引用id出的錯,萬變不離其宗,錯誤的額原因都是單 詞寫錯,今後細心即可。
5. 錯誤五
Cannot find class [www.csdn.spring.dao.imp.HelloDaoImpl] for bean with name 'helloDaoImpl' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException:www.csdn.spring.dao.imp.HelloDaoImpl
Caused by: java.lang.ClassNotFoundException: www.csdn.spring.dao.HelloDaoImpl
錯誤原因:倒錯包了,我的web項目 HelloDaoImpl在dao.impl包下而不是dao包下。所以包這樣的錯,看一下spring配置文具店額classes標簽的值導入的類包名 是否正確
6. 錯誤六
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'employeeBean' defined in class path resource [spring-constructor.xml]: Unsatisfied dependency expressed through constructor argument with index 2 of type [double]: Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments?
錯 誤原因:bean實例類中的屬性類型與spring配置文件中的構造器屬性類型不對應所導致,這種情況多出在使用類型指定構造 器參數;比如:
類中屬性如下,重點注意紅色部分:
private String name;
private String sex;
private doublesalary;
spring配置文件中的構造器標簽
<constructor-arg type="java.lang.String" value="楊凱" />
<constructor-arg type="java.lang.String" value="男" />
<constructor-arg type=" java.lang.Double" value="5000.00" />
這種錯誤是因為構造器中的type屬性不會自動對應拆 箱裝箱屬性類型,簡單點說就是類中使用的是基本數據類型,配置文件中對應的type屬性值就要是基本數據類型;類中使用 的是類類型,配置文件中對應的type屬性值就要是包名加上類類型;
還有一種原因就是不對應的原因, constructor-arg直接寫錯了,比如:private doublesalary;對應了<constructor-arg type=" Double" value="5000.00" />
或者順序不對的情況下回出現賦值錯誤,比如同時存在兩個相同類型的屬性, name應該為“楊凱”,如果sex在配置文件的位置與name的顛倒了,會出現name=“男”的情況
7. 錯誤七
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberBean' defined in class path resource [spring-construtor.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'www.csdn.spring.constructor.Member' for property 'member'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [www.csdn.spring.constructor.Member] for property 'member': no matching editors or conversion strategy found
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'www.csdn.spring.constructor.Member' for property 'member'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [www.csdn.spring.constructor.Member] for property 'member': no matching editors or conversion strategy found
錯誤原因:這種情況是一個bean實例引用另一個bean實例對象, 而引用的那個bean實例對象為空,但是在改bean實例的配置文件中又錯誤指明空值。舉個例子說明:
<bean id="memberBean" class="www.csdn.spring.constructor.MemberBean">
<!-- value="null" 這裡給value賦的是一個空字符串,而不是一個null空值 -->
<property name="name" value="null" />
<property name="member">
<null />
</property>
</bean>
關鍵 看紅色部分,紅色部分是正確的寫法,這樣寫引用空值對象才不會報錯,但是如果你像上面引用nam屬性那樣指明value= “null”就會出現改錯。
8. 錯誤八
錯誤 一:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Bean name 'deptBean' is already used in this <beans> element
Offending resource: class path resource [spring-byType.xml]
錯誤 二:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'empBean' defined in class path resource [spring-byType.xml]: Unsatisfied dependency expressed through bean property 'deptBean': : No qualifying bean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found 2: deptBean,deptBean1; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found 2: deptBean,deptBean1
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found 2: deptBean,deptBean1
這兩種錯誤原因:都是spring配置文件中自動裝配按byType時出的問題,配置文件, 紅 色部分為錯誤的解釋和導致錯誤的原因如下:
<bean id="compBean" class="www.csdn.spring.autowire.CompBean">
<property name="name" value="DELL" />
</bean>
<bean id="deptBean" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="銷售部門" />
</bean>
<!--
這裡只能出現一個deotBean,id名不一樣 但是類型一樣,都是deptBean實體的;id="deptBean"或同類型的不同id都會拋異常
<bean id="deptBean1" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="銷售部門" />
</bean> -->
<!-- 使用autoWrie 自動裝配,改屬性值byType;
按類型自動裝配,前提是同一個類型的只能有一個-->
<bean id="empBean" class="www.csdn.spring.autowire.EmpBean" autowire="byType">
<property name="name" value="楊凱 " />
<!-- <property name="comp" ref="compBean" />
<property name="dept" ref="deptBean" /> -- >
</bean>
9. 錯誤九
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'empBean' defined in class path resource [spring-byConstructor.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [www.csdn.spring.autowire.DeptBean]: : No qualifying bean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found 2: deptBean1,deptBean2; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found 2: deptBean1,deptBean2
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [www.csdn.spring.autowire.DeptBean] is defined: expected single matching bean but found 2: deptBean1,deptBean2
錯誤原因: spring配置文件中自動裝配按constructor時出的問題,配置文件, 紅色部分為錯誤 的解釋和導致錯誤的原因如下:
<!-- 在spring3.2以上版本中:使用構造器自動裝配時,如果有一個id與bean實 例中的屬性名相同的配置bean存在,雖然構造器自動裝配是按類型自動裝配的,
但是即使有多個相同類型的bean存 在也不受影響;受影響的情況是:沒有與bean實例中的屬性名相同的配置bean存在,
又有多個相同類型的bean配置 ,就會拋異常-->
<bean id="deptBean" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="銷售部門" />
</bean>
<bean id="deptBean1" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="銷售部門" />
</bean>
<bean id="deptBean2" class="www.csdn.spring.autowire.DeptBean">
<property name="name" value="銷售部門" />
</bean>
<!-- 使用autoWrie自動裝配,改屬性值constructor; 構造器自動裝配就是按類型自動裝配
beam實例中必須結合構造器使用,如果沒有構造器自動裝配後注入不進去值, 取出為空值-->
<bean id="empBean" class="www.csdn.spring.autowire.EmpBean" autowire="constructor">
<property name="name" value="楊凱 " />
<!-- <property name="comp" ref="compBean" />
<property name="dept" ref="deptBean" /> -- >
</bean>
10. 錯誤十
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unexpected failure
during bean definition parsing
Offending resource: class path resource [spring-collection.xml]
Bean 'collectionBean'; nested exception is org.springframework.beans.factory.parsing.BeanDefinitionParsingException:
Configuration problem: <property> element for property 'users' must specify a ref or value
Offending resource: class path resource [spring-collection.xml]
Bean 'collectionBean'
-> Property 'users'
Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: <property>
element for property 'users' must specify a ref or value
Offending resource: class path resource [spring-collection.xml]
Bean 'collectionBean'
-> Property 'users'
乍一看,有些許沒有頭腦,但是放下心仔細看 看,提示說什麼users屬性怎麼怎麼滴;還有一點提示就是說是spring-collection.xml配置文件中的錯誤,這就好找,找到 改配置中有關users的地方,
<bean id="u1" class="www.csdn.spring.collection.set.User">
<property name="name" value="楊凱" />
<property name="age" value="22" />
</bean>
。。。。。
這樣的代碼肯定不會出錯了,如果是這裡的錯報的就不是這個錯了 ,可能就是第一條或第二條錯了;再找下一塊有users的地方,找到了這裡:
<!-- list集合 -- >
<property name="users">
<!-- <array>
<ref bean="u1" />
<ref bean="u2" />
<ref bean="u3" />
</array> -->
<!-- <list>
<ref bean="u1" />
<ref bean="u2" />
<ref bean="u3" />
</list> -->
<!-- 還可以通過spring自帶的sehema約束中的util工 具約束的list集合遍歷-->
<util:list>
<ref bean="u1" />
<ref bean="u2" />
<ref bean="u3" />
</util:list>
</property>
仔細一看真是這裡的錯,紅色部分最開始忘了寫,注 釋掉了上面的list注入值的方式,後面的uti標簽注入值有沒有寫,這是在測試類中取值遍歷的時候就會遍歷一個空的users ,這是因為是沒有注入值的錯,所以沒有報空指針的錯,報的是這種莫名其妙的錯。
11. 錯誤十一
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'proxyFactoryBean' must be of type [www.csdn.spring.advice.SayServiceImpls], but was actually of type [$Proxy4]
這種錯誤一般出在aop面向切面的編程中,spring面向切面的代理有兩種,一種是jdk動態代理,一種是 cglib代理;這是你在使用的的使用如果混合時候就會出現上面的錯;這兩種代理的區別是前者是接口代理,就是返回一個接口 類型對象,而後者是類代理,不能返回接口類型對象只能返回類類型對象,如果返回接口了同樣會出這樣的錯。
還有可 能出錯的地方就是對應的spring配置文件,這
裡是最容易馬虎出錯的地方,仔細檢查一下的你的目標對象,比如: <!-- 目標對象 -->
<property name="target">
<ref bean="sayServiceImpls" />
</property>
這裡在引用bean的時候可能引入錯誤,可能會 引入jdk動態代理的目標類,也有可能你的目標類中實現了某些接口,不符合cglib代理的理念;還有可能馬虎出錯的地方:
<!-- 真實主題 目標對象 -->
<bean id="sayServiceImpls" class="www.csdn.spring.advice.SayServiceImpls"></bean>
真實對象的id和class屬性設置 錯誤的時候也會出錯。
12. 錯誤十二
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'proxyFactoryBean' defined in class path resource [spring-advice.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'proxyInterfaces' threw exception; nested exception is java.lang.IllegalArgumentException: [www.csdn.spring.proxy.advice.SayServiceImpl] is not an interface
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'proxyInterfaces' threw exception; nested exception is java.lang.IllegalArgumentException: [www.csdn.spring.proxy.advice.SayServiceImpl] is not an interface
這個問題很好解決,最關鍵的問題出在紅色部分,原因是在spring相關配置文件中設置抽象主題的時 候,既然是抽象主題就應該設置成接口,而不應該是實現類。比如下面的代碼,注意紅色部分:
<!--抽象主題 實現接口 -->
<property name="proxyInterfaces">
<array>
<value>www.csdn.spring.proxy.advice.Say ServiceImpl</value>
</array>
</property>
正確的寫法應該是:
<! --抽象主題 實現接口 -->
<property name="proxyInterfaces">
<array>
<value>www.csdn.spring.proxy.advice.Say Service</value>
</array>
</property>
13. 錯誤十三
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'proxyFactoryBean': FactoryBean threw exception on object creation; nested exception is org.springframework.aop.framework.AopConfigException: Unknown advisor type class www.csdn.spring.proxy.advice.AuditableImpl; Can only include Advisor or Advice type beans in interceptorNames chain except for last entry,which may also be target or TargetSource; nested exception is org.springframework.aop.framework.adapter.UnknownAdviceTypeException: Advice object [www.csdn.spring.proxy.advice.AuditableImpl@1f758500] is neither a supported subinterface of [org.aopalliance.aop.Advice] nor an [org.springframework.aop.Advisor]
Caused by: org.springframework.aop.framework.AopConfigException: Unknown advisor type class www.csdn.spring.proxy.advice.AuditableImpl; Can only include Advisor or Advice type beans in interceptorNames chain except for last entry,which may also be target or TargetSource; nested exception is org.springframework.aop.framework.adapter.UnknownAdviceTypeException: Advice object [www.csdn.spring.proxy.advice.AuditableImpl@1f758500] is neither a supported subinterface of [org.aopalliance.aop.Advice] nor an [org.springframework.aop.Advisor]
這個錯誤即紅色部分提示的錯誤,不 知道advice類型的異常,說白了就是編寫的spring通知的錯誤,這種錯誤比較常見,也是出於馬虎的錯誤,比如前者通知、 後置通知、環繞通知、異常通知、引入通知等這幾個通知中的任何一個通知類忘了寫繼承的父類;以下列出這幾個通知的類 編寫所繼承的類:
前置通知:
public class BeforeAdvice implements MethodBeforeAdvice
後置通 知:
public class AfterAdvice implements AfterReturningAdvice
環繞通知:
public class AroundAdvice implements MethodInterceptor
異常通知:
public class ThrowAdvice implements ThrowsAdvice
引入通知:
public class AuditableImpl extends DelegatingIntroductionInterceptor implements Auditable
14. 錯誤十四
java.lang.ClassCastException:
$Proxy10 cannot be cast to www.csdn.spring.proxy.advice.Auditable
java.lang.ClassCastException:
$Proxy11 cannot be cast to www.csdn.spring.proxy.advice.Auditable
像以上這個出現$ProxyXX cannot be cast to www.csdn.spring.proxy.advice.Auditable;什麼代理不能強轉成某一個類型的錯誤,一般都是在使用JDK動態代理或cglib 代理的時候出現的錯誤,錯誤原因有:
1).JDK動態代理與cglib代理混淆,比如使用cglib代理時不能實現接口,你 可能在使用的時候使用了cglib代理,但是卻實現了接口,如果你在spring配置文件中使用aspectjs來進行通知,又想使用 cglib接口那麼你需要做的是目標類不實現接口,spring配置文件中配置aop的時候加上下面紅色部分。
<aop:aspectj-autoproxyproxy-target-class="true" />
2)同樣是使用aspectjs通知的時 候,尤其是使用引入通知的時候,一定不要忘了讓引用通知的業務類加上注解@Aspect;還要注意的是你使用的引入目標類 和其實現接口的類路徑一定要正確,我這裡就范了一個小錯誤,到錯包的錯:
package www.csdn.spring.proxy.advice.aspectjs;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;
@Aspect
publicclass AuditableService {
@DeclareParents(value="*..*Service*", defaultImpl = AuditableImpl.class)
public Auditable auditable;
}
我在使用Auditable接口的時候倒錯了包,這裡其實類都在同一包下,根本不用倒包 ,但是我從上一個包中復制代碼的時候自動給我引入了上一個包的Auditable類;以後一定要注意了
15. 錯誤十五
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: <aspect> tag needs aspect bean reference via 'ref' attribute when declaring advices.
Offending resource: file [F:\csdn-study\MyWorkspace\springHelloJava\bin\spring- pojoXmlAspectjs.xml]
Aspect: ref=''
這個錯誤顧名思義,這裡已經提示的很清了,這裡列出這個錯誤是對那些對pojo-xml配 置通知不太熟悉的同學而言;這個錯誤就是在對應的spring配置文件中使用aop切面的時候忘寫了一個ref熟悉的錯,具體案 例代碼如下,注意下面的紅色部分,錯誤就出在紅色部分忘了寫ref="adviceService":
<!-- 使用 pojo-xml aspectjs配置自動代理 -->
<aop:config>
<!-- 配置切面 -- >
<aop:aspect ref="adviceService">
<!-- 引入通知 -- >
<aop:declare-parents types-matching="*..*Service*"
implement- interface="www.csdn.spring.proxy.advice.aspectjs.pojoxml.Auditable"
default- impl="www.csdn.spring.proxy.advice.aspectjs.pojoxml.AuditableImpl" />
<!-- 切面切入的 位置切入點,可以同時寫多個不同的切入點 -->
<aop:pointcut expression="execution(* www.csdn..UserServiceImpl.save(..))"
id="myPcut" />
<aop:pointcut expression="execution(* www.csdn..UserServiceImpl.update(..))"
id="myPcuts" />
<!--織入通知 method:指明方法; pointcut-ref引入切入點 -->
<aop:before method="beforeMethod" pointcut-ref="myPcut" />
<aop:after method="afterMethod" pointcut-ref="myPcut" />
<aop:around method="aroundMethod" pointcut-ref="myPcuts" />
</aop:aspect>
</aop:config>
16. 錯誤十六
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptDaoImpl' defined in class path resource [spring-dao.xml]: Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)
關鍵是藍色部分,藍色部分已經給出了提示:不匹配的構造器,這種錯誤出在spring配置中,使用namedParameterJdbcTemplate 時出的錯,錯誤出在下面:
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedPa rameterJdbcTemplate">
<property name="namedParameterJdbcTemplate" ref="namedParameterJdbcTemplate" />
</bean>
正確寫法:
<bean id="deptDaoImpl" class="www.csdn.spring.jdbc.DeptDaoImpl">
<property name="namedParameterJdbcTemplate" ref="namedParameterJdbcTemplate" />
</bean>
由於對該類不理解或者復制時容易出這樣的錯誤
17. 錯誤十七
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'localSessionFactoryBean' defined in class path resource [spring-hibernate.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available
Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available
這裡根據提示說錯誤的原因是當數據庫不能連接的時候,需要配置 hibernate.dialect'就是hibernate配置的方言,原因出在驅動類的配置,比如:properties文件中的: hibernate.driverClassName=oracle.jdbc.driver.OracleDriver
這裡如果寫錯了就會出現不能連接的情況,驅動的 名字一定要正確,配置文件中的其他屬性也一定要正確,據我本人測試如果在改配置文件中直接寫的 driverClassName=oracle.jdbc.driver.OracleDriver
在spring配置文件這樣取值時:<property name="driverClassName" value="${driverClassName}" />就會錯誤,但是如果這樣寫就對: <property name="driverClassName" value="${hibernate.driverClassName}" />
18. 錯誤十八
java.lang.IllegalArgumentException: node to traverse cannot be null!
解決方法:通常此類 錯誤都是由於HQL語句寫的不正確,例如from寫成了form,或者set A = 1 and B = 2,其中set不同字段用逗號"," 分離而不是用and.總之仔細檢查HQL語句,看看有沒有語法錯誤即可.