1 前言
最近在教人使用SpringMVC,在運行過程中,有不少人遇到了這個問題,即“class path resource [com/xxx/entity/User.hbm.xml] cannot be opened because it doesn't exist”,但在項目的工程目錄中,.hbm.xml又確實存在,這個問題如此詭異,所以特此在這裏進行記錄。
2 環境和工具
SpringMVC4.3.18,Hibernate5.4.3.Final,Idea。
3 解決方案
先去你的項目的classes目錄下,檢查classes編譯文件夾的同名目錄下是否存在你的映射文件。因爲Spring在加載映射文件時加載的是你classes編譯文件夾下的配置文件而不是你src目錄下的。所以很多人出問題出在這一步,classes目錄下只有class字節碼文件並沒有與之對應的xml文件。所以有些同學將其手動複製進去,但是隻要一clean,文件就又被清除了,是不是很詭異?其實,一切都是很簡單的一個原因。因爲沒有在pom文件中配置如下設置:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
只要配置了,一切就恢復正常了,如果配置之後又出現找不到applicationContext.xml的錯誤,可以在加上,如下代碼:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
一切問題迎刃而解,哈哈哈。
當然啦,如果你不是因爲這個問題,這裏提供其他的參考建議:
1:檢查xxx.hbm.xml文件的class中的name全路徑是否正確。有時候你通過逆向工程的生成的的映射文件的全類名和你映射文件的包名是不同的。
2:clean項目重新加載Tomcat。
3:檢查導入hibernate的映射文件的方法是否正確。