Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA 2.0, hibernate 3.5, jars & persistence.xml location

I'm building a desktop application using hibernate 3.5 & JPA 2.0.

I have 2 jars,

the lib, which defines every entity and DAO, packages looks like this :

org.my.package.models
org.my.package.models.dao
org.my.package.models.utils

In org.my.package.utils I defined my hibernate utility class for getting EM & EMF instances, which means the lib is bound to a Persistence Unit name but that's not a problem for now (anyway you can recommend me a better way to manage that)

the second jar is built as follow:

org.my.package.app

META-INF is defined on the root of the project which means in my jar I can find this directories directly in the root:

META-INF/
META-INF/persistence.xml
org/
org/my/
...
org/my/package/app/Main.class

When I run the app, hibernate doesn't managed to find persistence.xml it throws an exception something like "package or class for PersistenceUnitName not found".

SLF4J: The requested version 1.5.11 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
3 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.0-Final
25 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.0-Final
28 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
33 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
41 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
153 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
160 [main] INFO org.hibernate.ejb.Version - Hibernate EntityManager 3.5.0-Final
Exception in thread "main" java.lang.ExceptionInInitializerError
        at Main.main(Main.java:171)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: PMMPU] class or package not found
        at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1316)
        at org.hibernate.ejb.Ejb3Configuration.addClassesToSessionFactory(Ejb3Configuration.java:1094)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:981)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:275)
        at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:359)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:55)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
        at dil.tal.polymarmots.utils.HibernateUtil.getEmf(HibernateUtil.java:45)
        at dil.tal.polymarmots.utils.HibernateUtil.getEm(HibernateUtil.java:54)
        at dil.tal.polymarmots.utils.HibernateUtil.getMotDAOImpl(HibernateUtil.java:115)
        at dil.tal.polymarmots.models.Mot.<clinit>(Mot.java:30)
        ... 1 more
Caused by: java.lang.ClassNotFoundException: model.Extrait
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:170)
        at org.hibernate.ejb.Ejb3Configuration.classForName(Ejb3Configuration.java:1232)
        at org.hibernate.ejb.Ejb3Configuration.addNamedAnnotatedClasses(Ejb3Configuration.java:1304)
        ... 11 more

I googled a bit about the problem but I can't get the source code organisation right.

Any help ?

like image 225
amirouche Avatar asked Apr 18 '10 15:04

amirouche


People also ask

What jars are required for Hibernate?

The first and most basic JAR file needed is a JDBC driver. The JDBC driver is a bridge or an API between Java and the database. The JDBC driver provides us with the generic classes that will help us communicate with the database.

Which Hibernate version is compatible with Java 11?

Hibernate 5.3 lists Java 11 as supported in the latest release 5.3. 22. Moreover, Hibernate 5.6 is also Java 11 compatible.

What is the difference between JPA and Hibernate?

Conclusion: The major difference between Hibernate and JPA is that Hibernate is a framework while JPA is API specifications. Hibernate is the implementation of all the JPA guidelines.

How do I download a JAR file from Hibernate?

Step 1) Write URL https://hibernate.org/orm/releases/ in browser. Step 2) Click on the "More info" button attached with the latest version. Step 3) Click on the "Download Zip archive" button on the right side. Step 4) Hence Hibernate JAR files are downloaded successfully.


1 Answers

The class or package not found message is self-explaining: a class or a package is not found - not the persistence.xml - as suggested by the cause of the exception:

Caused by: java.lang.ClassNotFoundException: model.Extrait

The model.Extrait entity doesn't reflect the packaging you're showing but it is very likely declared in your persistence.xml (that you're not showing) but not present on the class path.

like image 55
Pascal Thivent Avatar answered Nov 15 '22 17:11

Pascal Thivent