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?)

War es hilfreich?

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top