Come posso verificare se persistence.xml è stato trovato o no?
-
05-07-2019 - |
Domanda
Devo testare alcune cose su un progetto che è stato sviluppato da altri, ma è nuovo per me. Stanno usando Hibernate come implementazione dell'APP.
Ho una macchina virtuale in cui tutto è impostato, ma quando voglio avviare qualsiasi Testclient (piccoli programmi console, nessun Unittesting). Ottengo sempre lo stesso errore.
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
La struttura del progetto è simile a questa. Stranamente ho già fatto funzionare questa cosa (prima delle mie vacanze estive.
|-- bin
|-- lib
|-- rsc
| |-- META-INF
| | `-- persistence.xml
|-- src
| |-- org
| | | ... all sourcecode below
`-- target
Ho provato a restringere il problema, quindi ho eliminato l'intera cartella META-INF. Ancora lo stesso errore. Non era quello che mi aspettavo e mi ha portato a credere che persistence.xml non si trova affatto. Non so perché abbiano inserito META-INF nella cartella rsc (come ho già detto, non è il mio progetto) ma quando lo metto nella cartella radice o nella cartella src l'errore rimane.
Come posso assicurarmi che persistence.xml sia stato trovato? Esiste una documentazione in cui inserire META-INF. (E perché questo errore è così fuorviante?)
Soluzione
Dipende dal processo di compilazione in cui finiranno i file / jar compilati, quando si avvia l'app di test. Sono abbastanza sicuro, non inizierai dalla cartella src. Otterrai una cartella di build o test da cui eseguire l'app. Quindi la struttura delle cartelle dovrebbe essere in genere così:
|- build
|- classes
|- org (packages)
|- ...
|- META-INF
|- persistence.xml
|- ... (other config files)
Puoi anche controllare questo link .