Java org.hibernate.MappingNotFoundException:resource:com/corp/dept/proj/football.hbm.xml未找到
不,这和or不是同一个问题 原因很简单,我的*.hbm.xml文件已经在正确的目录中(Java org.hibernate.MappingNotFoundException:resource:com/corp/dept/proj/football.hbm.xml未找到,java,xml,hibernate,Java,Xml,Hibernate,不,这和or不是同一个问题 原因很简单,我的*.hbm.xml文件已经在正确的目录中(src/main/resources/com/corp/dept/proj) 此外,只要我在HibernateUtil.java中使用这个简单的静态方法,从hibernate.cfg.xml,静态地(即在构建时硬编码),它就可以正常运行: private static SessionFactory buildSessionFactory() { try { return new Conf
src/main/resources/com/corp/dept/proj
)
此外,只要我在HibernateUtil.java中使用这个简单的静态方法,从hibernate.cfg.xml
,静态地(即在构建时硬编码),它就可以正常运行:
private static SessionFactory buildSessionFactory() {
try {
return new Configuration().configure("resources/hibernate.cfg.xml").buildSessionFactory();
}
catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
但是,由于我想将一些参数从hibernate.cfg.xml
移动到一个属性文件,以便在运行时读取(例如,DB的“connection.url”):
及
我收到一个运行时异常:
Apr 03, 2014 14:31:49 AM org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
Apr 03, 2014 14:31:49 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.2.6.Final}
Apr 03, 2014 14:31:49 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Apr 03, 2014 14:31:49 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Apr 03, 2014 14:31:49 AM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: resources/hibernate.cfg.xml
Apr 03, 2014 14:31:49 AM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: resources/hibernate.cfg.xml
Apr 03, 2014 14:31:49 AM org.hibernate.cfg.Configuration addResource
INFO: HHH000221: Reading mappings from resource: resources/com/corp/dept/proj/FooTbl.hbm.xml
Apr 03, 2014 14:31:49 AM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
Apr 03, 2014 14:31:49 AM org.hibernate.cfg.Configuration addClass
INFO: HHH000221: Reading mappings from resource: com/corp/dept/proj/FooTbl.hbm.xml
Apr 03, 2014 14:31:49 AM org.hibernate.cfg.Configuration addResource
INFO: HHH000221: Reading mappings from resource: com/corp/dept/proj/FooTbl.hbm.xml
Initial SessionFactory creation failed: resource: com/corp/dept/proj/FooTbl.hbm.xml not found
Caused by: org.hibernate.MappingNotFoundException: resource: com/corp/dept/proj/FooTbl.hbm.xml not found
at org.hibernate.cfg.Configuration.addResource(Configuration.java:712)
at org.hibernate.cfg.Configuration.addClass(Configuration.java:757)
at com.corp.dept.proj.myws.HibernateUtil.buildHibernateConfig(HibernateUtil.java:141)
at com.corp.dept.proj.myws.HibernateUtil.<clinit>(HibernateUtil.java:56)
2014年4月3日14:31:49 AM org.hibernate.annotations.common.Version
信息:HCANN000001:Hibernate Commons注释{4.0.2.Final}
2014年4月3日14:31:49 AM org.hibernate.Version日志版本
信息:hh000412:Hibernate核心{4.2.6.Final}
2014年4月3日14:31:49 AM org.hibernate.cfg.Environment
信息:HH000206:找不到hibernate.properties
2014年4月3日14:31:49 AM org.hibernate.cfg.Environment buildBytecodeProvider
信息:HH000021:字节码提供程序名称:javassist
2014年4月3日14:31:49 AM org.hibernate.cfg.Configuration
信息:HH000043:从资源配置:resources/hibernate.cfg.xml
2014年4月3日14:31:49 AM org.hibernate.cfg.Configuration getConfigurationInputStream
信息:hh000040:配置资源:resources/hibernate.cfg.xml
2014年4月3日14:31:49 AM org.hibernate.cfg.Configuration addResource
信息:HH000221:正在从资源读取映射:resources/com/corp/dept/proj/footbal.hbm.xml
2014年4月3日14:31:49 AM org.hibernate.cfg.Configuration doConfigure
信息:HH000041:配置的会话工厂:null
2014年4月3日14:31:49 AM org.hibernate.cfg.Configuration addClass
信息:hh000221:正在从以下资源读取映射:com/corp/dept/proj/footbal.hbm.xml
2014年4月3日14:31:49 AM org.hibernate.cfg.Configuration addResource
信息:hh000221:正在从以下资源读取映射:com/corp/dept/proj/footbal.hbm.xml
初始会话工厂创建失败:未找到资源:com/corp/dept/proj/footbal.hbm.xml
原因:org.hibernate.MappingNotFoundException:resource:com/corp/dept/proj/footbal.hbm.xml未找到
位于org.hibernate.cfg.Configuration.addResource(Configuration.java:712)
位于org.hibernate.cfg.Configuration.addClass(Configuration.java:757)
位于com.corp.dept.proj.myws.HibernateUtil.buildHibernateConfig(HibernateUtil.java:141)
在com.corp.dept.proj.myws.HibernateUtil.(HibernateUtil.java:56)
现在。。。在异常发生之前,日志显示已找到文件。我还验证了这些文件是否实际包含在WAR文件中,与预期的子目录完全相同。那么,为什么这是一个错误
修复此问题的建议方法是什么?获取配置(sConfig)实例后,您试图错误地添加XML映射文档。由于您使用的是基于XML的映射文件(.hbm),因此要添加XML映射文件,您需要使用addResource()方法,而不是addClass()方法 addClass()方法,用于添加基于注释的映射。 因此,替换
sConfig.addClass(FooTbl.class);
与
希望这能解决您的问题。我找到了正确的解决方案: 不要走静态初始化块路线,只需坚持原来的静态buildSessionFactory()方法,并在
Configuration.configure()
和Configuration.buildSessionFactory()之间插入Configuration.setProperty()
语句(根据需要)。也就是说,与问题中发布的buildSessionFactory()的原始实现不同,我确实:
private static SessionFactory buildSessionFactory() {
try {
Configuration config = new Configuration();
config = config.configure("resources/hibernate.cfg.xml");
config.setProperty("hibernate.connection.url", properties.getProperty("dburl"));
SessionFactory session = config.buildSessionFactory();
return session;
}
catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
无需扩展配置
类和。。。工作起来很有魅力。:) 如果是addClass()方法,请确保文件FooTbl.hbm.xml名称应与类名匹配
这里的类名是footbal,然后映射文件名应该是footbal.hbm.xml,否则将生成异常
试试这个。:) 尝试一个测试并将footbal.hbm.xml复制到类文件夹中,这与您将.class文件定位到的位置相同。我注意到,在您的日志文件中,当它找到该文件时,它正在读取resources/com/corp/dept/proj/footbal.hbm.xml
。如果没有,它正在尝试读取com/corp/dept/proj/football.hbm.xml
。感谢这一提示。我试了你的建议,问题也一样。我还尝试了“resources/com/corp/dept/proj/football.hbm.xml”
,结果出现了另一个问题。看起来我必须放弃静态初始化块方法,而不是保留原始实现,只是扩展配置
类来覆盖从hibernate.cfg.xml
读取的内容。如果这行得通,我会将此作为答案发布+小费1英镑。
sConfig.addClass(FooTbl.class);
sConfig.addResource("com/corp/dept/proj/FooTbl.hbm.xml");
private static SessionFactory buildSessionFactory() {
try {
Configuration config = new Configuration();
config = config.configure("resources/hibernate.cfg.xml");
config.setProperty("hibernate.connection.url", properties.getProperty("dburl"));
SessionFactory session = config.buildSessionFactory();
return session;
}
catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}