当我的默认包类路径中有hibernate.cfg.xml时,为什么hibernate找不到属性?

时间:2009-09-08 15:00:13

标签: hibernate configuration annotations

我有一段时间让这个简单的应用程序正常工作。我在我的默认类路径中有一个配置文件,在配置文件中使用带有正确类条目的注释,以及由hibernate eclipse插件工具生成的默认Session工厂类。如果我只依赖于默认的类路径配置文件,我找不到hibernate.properties。如果我在应用程序生命周期的早期添加另一个调用来设置工厂对象的文件路径,则会出现Duplicate类/实体映射错误。为什么它找不到属性,或者为什么即使配置文件在类路径上也可能看到错误?什么是动态设置配置文件的文件路径的正确方法,所以我不必依赖应用程序的类路径中内置的配置文件?

3 个答案:

答案 0 :(得分:1)

感谢Andre,我已经获得了更多的洞察力,基本上解决了我最初的问题。

基本上,我决定摆脱生成的SessionFactory类,只使用常规的SessionFactory。我遇到的问题是由于每次引用工厂类时调用的静态初始化,基本上,当我认为只有一个时,我的应用程序有两个会话。现在,至于配置,我阅读了概念文档的配置章节中的3.7节,它误导性地表明你可以传递,或者至少我将其解释为“路径”到另一个文件,如:

SessionFactory sf = new AnnotationConfiguration().configure("what/i/though/was/path/to/file").buildSessionFactory();

但事实证明它会在同一个地方查找配置文件的“名称”:默认的classpath包。此时,我决定从指定名称的普通旧java属性加载属性,并将所有命名文件保留在类路径中。通过这种方式,我可以为正确的环境加载正确的文件。现在,如果我能够通过此部署只发出以下问题:

Sep 14 05:25:53 localhost.localdomain(SessionFactoryObjectFactory.java:82)INFO org.hibernate.impl.SessionFactoryObjectFactory - 未将工厂绑定到JNDI,未配置JNDI名称

他们肯定不会让它易于使用...... ;-)再次感谢,我真的很感激回应。

答案 1 :(得分:0)

这不是一个真正的答案,只是进一步的观察不符合评论:

作为另一个跟进,为了帮助任何人成为救援人员,我现在正在部分完成应用程序运行期间的配置和初始化过程。我现在在我的默认类路径中有hibernate.cfg.xml。如果我只是运行它,我得到属性未找到错误。如果我添加对会话工厂类的调用... setFilePath(pathToConfigFileAsString)方法,我得到两个不同的结果,这取决于这是第一次运行干净构建还是后续运行。在第一次运行。我们现在在特定类的AnnotationsConfiguration期间死掉,而不是输出说明为什么或任何东西。在随后的运行中,我们将一直到DEBUG org.hibernate.cfg.AnnotationBinder - 处理注释然后只是死亡,同时也没有帮助调试发生了什么。为什么根据应用程序之前是否运行会有两种不同的结果?

答案 2 :(得分:0)

我坦率地不知道Eclipse生成的SessionFactory代码在做什么,但如果你的hibernate.cfg.xml真的在你的root src文件夹中,那么在为你创建SessionFactory时应该会这样做。 / p>

SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();

configure()方法可能会使用一个参数来指示要使用的配置文件。如果省略,则隐含“root src文件夹”hibernate.cfg.xml

也许玩这个可以给我们更多关于这个问题的信息。