Java Hibernate可以读取Hibernate.cfg.xml的内容,但仍然会给出错误?
我知道这是个老生常谈的问题,但它确实困住了我 我接受GetInputsReal的建议,使用classLoader,代码如下:Java Hibernate可以读取Hibernate.cfg.xml的内容,但仍然会给出错误?,java,hibernate,Java,Hibernate,我知道这是个老生常谈的问题,但它确实困住了我 我接受GetInputsReal的建议,使用classLoader,代码如下: public static Session getSession() { if (sessionFactory == null) { InputStream xmlInputStream = ResourceUtil.getInputStream(HibernateDBUtil.class, CFG_XML);
public static Session getSession() {
if (sessionFactory == null) {
InputStream xmlInputStream =
ResourceUtil.getInputStream(HibernateDBUtil.class, CFG_XML);
Scanner scanner = new Scanner(xmlInputStream);
//just a test I can read the xml file ,print content here
while(scanner.hasNext()) System.out.println(scanner.nextLine());
scanner.close();
//reget the stream
xmlInputStream =
ResourceUtil.getInputStream(HibernateDBUtil.class, CFG_XML);
Configuration cfg = new Configuration();
cfg.addInputStream(xmlInputStream).configure();
// version 4.3 's way to config
StandardServiceRegistryBuilder builder =
new StandardServiceRegistryBuilder().applySettings
(cfg.getProperties());
StandardServiceRegistryImpl registry =
(StandardServiceRegistryImpl) builder.build();
sessionFactory = cfg.buildSessionFactory(registry);
}
return sessionFactory.openSession();
}
private static SessionFactory sessionFactory;
private static final String CFG_XML = "properties/hibernate.cfg.xml";
我确认ResourceUtil.getInputStream工作正常,因为我可以打印hibernate.cfg.xml的内容,但为什么仍然给我错误:
更新:
完整堆栈跟踪:
信息:hh000412:Hibernate核心{4.3.0.Final}
2014年1月10日晚上11:33:43 org.hibernate.cfg.Environment
信息:hh000206:hibernate.properties未找到2014年1月10日11:33:43
PM org.hibernate.cfg.Environment buildBytecodeProvider
信息:HH000021:字节码提供商名称:javassist 2014年1月10日
11:33:44 PM org.hibernate.cfg.Configuration配置信息:hh000043:
从资源配置:/hibernate.cfg.xml 2014年1月10日晚上11:33:44
org.hibernate.cfg.Configuration getConfigurationInputStream
信息:hh000040:配置资源:/hibernate.cfg.xml异常
在线程“main”org.hibernate.HibernateException:/hibernate.cfg.xml中
找不到
org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173)atorg.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:2093)
位于org.hibernate.cfg.Configuration.configure(Configuration.java:2074)
位于org.hibernate.cfg.Configuration.configure(Configuration.java:2054)
在
cn.edu.gdut.utils.HibernateDBUtil.getSession(HibernateDBUtil.java:49)
在
cn.edu.gdut.utils.HibernateDBUtil.listBasicElement(HibernateDBUtil.java:25)
位于cn.edu.gdut.utils.HibernateDBUtil.main(HibernateDBUtil.java:20)
我认为,文件在IDE中的位置并不重要。重要的是在执行期间文件将在最终捆绑包中的何处 因此,假设您的
properties/
文件夹应该成为已执行捆绑包的根目录。这样,由于hibernate.cfg.xml位于properties/
中,因此在执行期间它应该位于根目录中。你能试着用这个吗
私有静态最终字符串CFG_XML=“hibernate.CFG.XML”代码>
已更新
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml");
下面是您的代码。在
hibernate.cfg.xml
中,我提到了
请提供完整的堆栈跟踪。谢谢,请参阅完整堆栈。我尝试使堆栈文本看起来更好,但失败了,希望不要让您感到不安。hibernate似乎无法找到您的hibernate.cfg.xml。尝试创建一个以CFG_XML作为路径参数的文件,并检查getAbsolutePath()方法将指向何处。也许你有一个错误的根目录?谢谢。很抱歉我的回复太晚了。事实上,在上面的代码中,我可以得到xmlInputstream内容(请参阅scanner,我可以读取它的内容),这意味着没有什么问题。我使用类加载器在ResourceUtil类中加载资源,它与其他部分配合得很好,比如图标和属性文件。但是Hibernate就是找不到xmlInputStream,为什么?谢谢。我以前试过,但没有用。也许,我需要更仔细地阅读官方文档寻求帮助。@xiaowang根据我的知识addInputStream()Configuration
类的
用于从InputStream读取映射,而不是读取hibernate配置文件。您必须使用setProperty()
设置hibernate的不同属性,如hibernate.dial
等,或者使用SettingsFactory
传递cfg文件。我同意更新。如果您要使用cfg.xml
文件,则必须使用上述代码。否则,您可以使用setProperty()
要从代码设置hibernate配置并使用addInputStream()
将hbm inputStream传递到配置
谢谢,我阅读了[questions/8830357]并阅读了源代码,理解它。我的结论是不要混合配置文件hibernate.cfg.xml和xxx.hbm.xml映射文件。我们最好在使用hibernate时让javadoc工作,否则会造成麻烦。是的,根据部署情况,最好使用hibernate.cfg.xml
,因为如果您通过代码完成了hibernate的所有配置,并且在部署之后您想要更改hibernate的一些设置,那么您必须重新部署/Hotdeploy“.class”文件…我认为这比只编辑xml文件要好。。