我有基于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