我有基於Hibernate和Spring(編程配置)的web項目。 Hibernate映射在包中存儲在一個JAR中。Spring + Hibernate Session Factory:映射JAR內的文件目錄
當涉及到初始化會話工廠我習慣叫:
sessionFactory.
setMappingDirectoryLocations(new Resource[]{
new ClassPathResource("org/all/theway/to/hibernatemappings")});
爲了告訴Hibernate在何處尋找映射文件。 「org/all/theway/to/hibernatemappings」是包含hbm.xml文件的包。這在Eclipse(GWT dev模式)下工作正常,因爲包含映射的項目也被簽出並鏈接到我的web項目。但是,一旦我創建了一個戰爭並將它部署到Tomcat,它就無法獲得類路徑資源。
Spring的使用ClassPathResource的javadoc暗示這一點:「支持的分辨率的java.io.File如果類路徑的資源存在於文件系統,而不是在JAR資源始終支持作爲URL解析。」
但是做什麼呢?我也可以使用setMappingJarLocation,但我不喜歡在我的Spring上下文中對一個jar文件名進行硬編碼。此外,當我嘗試它時,它也只能在IDE中工作,但在Tomcat中相同的文件路徑(WEB-INF/lib/file.jar)不起作用。這也使我相信這將是一個醜陋的解決方案。
是否有一種解決方法可以在不使用jar文件的情況下工作?
謝謝,但很抱歉,沒有幫助:java.io.FileNotFoundException:類路徑資源[classpath *:/ org/all/theway/to/hibernatemapping]無法解析爲URL,因爲它不存在 – rainer198
您是否包含*之後的'/',或者它在錯誤信息中,儘管你沒有包含它?通常當通過在路徑之前提供'classpath *'來獲取jar文件中的東西時。 Spring的LocalSessionFactoryBean在xml配置中接受這個模式。檢查https://jira.springsource.org/browse/SPR-469。在調試Spring代碼後,我給了你相當於xml配置。 – Adi
@ rainer198對不起,我意識到我以前的答案中所犯的錯誤。檢查編輯後的答案,如果您仍然在尋找不同的解決方案,它可以不加修改地工作。 – Adi