我有一个时间让这个简单的应用程序工作的婊子。我在默认的类路径中有一个配置文件,在配置文件中使用带有正确类条目的注释,以及由hibernate eclipse插件工具生成的默认Session工厂类。如果我只依赖默认的类路径配置文件,我会得到一个没有找到的hibernate.properties。如果我在应用程序生命周期中尽早添加另一个调用,以设置工厂对象的文件路径,则会出现重复的类/实体映射错误。为什么它找不到属性,或者即使配置文件位于类路径中,为什么会看到该错误?什么是动态设置文件路径到配置文件的正确方法,所以我不必依赖应用程序类路径中内置的配置文件?为什么在我的默认包类路径中有hibernate.cfg.xml时,hibernate没有找到属性?
回答
谢谢安德烈,我已经获得了更多的洞察力,基本上解决了我最初的问题。
基本上,我决定摆脱生成的SessionFactory类,而只是使用常规的SessionFactory。我遇到的问题是由于每次引用工厂类时调用的静态初始化,基本上,当我想只有一个时,我的应用程序有两个会话。现在,关于配置,我阅读概念文档的配置章节中的第3.7节,它误导性地表明您可以通过,或者至少是我解释为另一个文件的“路径”,例如:
SessionFactory sf = new AnnotationConfiguration().configure("what/i/though/was/path/to/file").buildSessionFactory();
但事实证明它会在相同的地方寻找配置文件的“名称”:默认的classpath包。此时,我决定从普通的旧java属性加载一个属性来指定名称,并将所有指定的文件保留在类路径中。通过这种方式,我可以为正确的环境加载正确的文件。现在,如果我能通过这个部署只有问题:
9月14日05:25:53 localhost.localdomain(SessionFactoryObjectFactory.java:82)INFO org.hibernate.impl。SessionFactoryObjectFactory - 不绑定工厂到JNDI,没有配置JNDI名称
它们肯定不会使它易于使用...... ;-)再次感谢,我非常感谢回应。
这是不是一个真正的答案,只是进一步的观测,将不适合评论:
另一个跟进,帮助任何会被救助者,我现在通过配置和初始化获取部分在应用程序运行过程中。我现在在我的默认类路径中有hibernate.cfg.xml。如果我只是运行这个,我得到属性找不到错误。如果我向会话工厂类... setFilePath(pathToConfigFileAsString)方法添加调用,则会得到两个不同的结果,具体取决于这是干净构建的第一次运行还是后续运行。第一次运行。我们现在在特定类的AnnotationsConfiguration期间死亡,而不是输出说明原因或任何事情。在后续运行中,我们将完成DEBUG org.hibernate.cfg.AnnotationBinder的所有操作 - 处理注释,然后死掉,对于发生的情况也没有任何帮助。为什么会根据应用程序是否已经运行而产生两种不同的结果?
你应该编辑你的问题来包括这个,而不是发布一个答案。 – 2009-09-08 18:42:04
我坦率地不知道你的Eclipse生成的SessionFactory代码在做什么,但是如果你的hibernate.cfg.xml
是真的在你的根src文件夹中,这应该成为你创建一个SessionFactory
。
SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
configure()
方法可能需要一个参数来指示使用哪个配置文件。如果省略,则隐含“root src文件夹”hibernate.cfg.xml
。
也许玩这个可以给我们更多关于这个问题的信息。
- 1. “没有默认属性”
- 2. 路径中没有找到类“edu.stanford.cs231m.HelloAndroidActivity”:DexPathList
- 3. “属性'路径'没有值”
- 4. 在默认路径中找不到ArcSDK.h
- 5. 为什么qq5默认包中没有包含qmake-qt5
- 6. 为什么SerialPort类没有RIHolding属性?
- 7. 为什么我的类默认在Visual Studio中是私有的?
- 8. 在Ubuntu中有没有默认的库路径?
- 9. 为什么没有部署hibernate.cfg.xml?
- 10. 路径上没有找到类DexPathList
- 11. Hibernate无法找到我的hibernate.cfg.xml文件
- 12. 路径没有找到
- 13. 为什么闭包类型/ lambdas在C++中没有默认构造函数
- 14. 为什么我在kubernetes上没有默认的serviceAccount?
- 15. 为什么我的PHP类没有保存它的属性?
- 16. 为什么OS X没有默认的包管理器?
- 17. 有没有一个库等在Hibernate限制属性中的属性路径表达式中加入连接
- 18. 类'System.DBNull'不能被索引,因为它没有默认属性
- 19. 类'clsGetHeaderValue'不能被索引,因为它没有默认属性
- 20. 默认路由与在属性定义的路径在ASP.MVC
- 21. 为什么这是我的默认路径?
- 22. Hibernate异常hibernate.cfg.xml找不到
- 23. 为什么我的节点没有找到路由?
- 24. 为什么src/main/config中的hibernate.cfg.xml默认不是?
- 25. 默认的Android SDK路径是什么?
- 26. Git .ssh的默认路径是什么?
- 27. 为什么moq默认设置所有属性?
- 28. 包没有找到,即使它是在这两个构建类路径和运行时类路径
- 29. PHPUnit的:我的包类没有找到
- 30. 查找具有域类和属性路径的属性的类型
作为一个跟进,似乎hibernate最初是在应用程序启动时配置它自己,可能是一个不同的SessionFactory类,而不是我认为的那样。你如何知道Hibernate将使用哪个类作为默认的SessionFactory?有没有一些配置属性应该指向这个类,所以它使用它?我没有看到任何地方 – wkhatch 2009-09-08 17:33:04