如何测试是否找到persistence.xml?
问题描述:
我必须在其他人开发的项目上测试一些项目,但对我来说是新项目。 他们使用Hibernate作为JPA实现。如何测试是否找到persistence.xml?
我得到了一台虚拟机,其中设置了一切,但是当我想启动任何Testclient(小型控制台程序,没有Unittesting)时。我总是得到同样的错误。
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:698)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
...
Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57)
at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:409)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:119)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2006)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1289)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:691)
... 7 more
项目结构看起来像这样。奇怪的是我已经有这个事情我summerholdays之前运行(
|-- bin
|-- lib
|-- rsc
| |-- META-INF
| | `-- persistence.xml
|-- src
| |-- org
| | | ... all sourcecode below
`-- target
我试图缩小问题,所以我删除整个META-INF文件夹中。不过同样的错误。这不是我所期待的和导致我相信没有找到persistence.xml 我不知道他们为什么把META-INF放到rsc文件夹中(正如我提到的,这不是我的项目),但是当我将它放入根文件夹或在src文件夹中错误仍然存在。
如何确保已找到persistence.xml?是否有任何需要放置META-INF的文档(以及为什么这个错误消息如此误导?)
答
这取决于您的编译过程,编译后的文件/ jar将在启动测试应用程序时结束。我很确定,你不会从src文件夹开始。你会得到一些构建或测试文件夹来运行你的应用程序。然后将文件夹结构通常应该是这样的:
|- build
|- classes
|- org (packages)
|- ...
|- META-INF
|- persistence.xml
|- ... (other config files)
你也可以查看此link。
非常感谢,我曾经在我的其他项目中有一个ant目标,所以我不知道persistence.xml需要在某个位置。 (我仍然与错误消息争吵。) – sebastiangeiger 2009-09-10 10:15:21