Wie kann ich testen, ob persistence.xml gefunden wurde oder nicht?
-
05-07-2019 - |
Frage
Ich habe einige Dinge an einem Projekt zu testen, die von anderen entwickelt wurde, ist aber neu für mich. Sie sind mit Hibernate als JPA-Implementierung.
Ich habe eine virtuelle Maschine, in der alles eingerichtet ist, aber wenn ich will jede Testclient (kleine Konsolenprogramme, kein Unittesting) starten. Ich bekomme immer die gleichen Fehler.
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
Die Projektstruktur sieht wie folgt aus. Merkwürdigerweise hatte ich bereits das Ding läuft (vor meiner summerholdays.
|-- bin
|-- lib
|-- rsc
| |-- META-INF
| | `-- persistence.xml
|-- src
| |-- org
| | | ... all sourcecode below
`-- target
Ich habe versucht, das Problem zu verengen, also löschte ich den ganzen Ordner META-INF. Immer noch die gleichen Fehler. Das war nicht das, was ich erwartet hatte, und führte mich, dass persistence.xml zu glauben, überhaupt nicht gefunden. Ich weiß nicht, warum sie META-INF im rsc Ordner abgelegt (wie ich bereits erwähnt, es ist nicht mein Projekt), aber wenn ich es in den Stammordner setzen oder im src Ordner der Fehler bleibt.
Wie kann ich sicherstellen, dass persistence.xml gefunden wurde? Gibt es eine Dokumentation, wo META-INF platziert werden soll. (Und warum ist diese Fehlernachricht so irreführend?)
Lösung
Es hängt von Ihren Build-Prozess, wo die kompilierten Dateien / Glas wird am Ende, wenn der Test-App zu starten. Ich bin mir ziemlich sicher, Sie nicht von src-Ordner starten. Sie werden einige Build oder Testordner erhalten Sie Ihre App laufen. Dann sollte die Ordnerstruktur typischerweise so aussehen:
|- build
|- classes
|- org (packages)
|- ...
|- META-INF
|- persistence.xml
|- ... (other config files)
Sie können auch überprüfen diese Link .