public class LoginTest {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("IRCBotPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Login lg = new Login();
lg.setPassword("password");
lg.setUserName("Rocky");
em.persist(lg);
em.flush();
Login st = em.find(Login.class, lg.getPassword());
System.out.println(st);
em.getTransaction().commit();
em.close();
emf.close();
}
}
I'm getting an Exception when I try to run this class
javax.persistence.PersistenceException: No Persistence provider for EntityManager named IRCBotPU:
No META-INF/persistence.xml was found in classpath.
META-INF/persistence.xml is in my classpath. I don't know what is the reason or this exception.
Persistence library is TopLink.
I created a folder callled META-INF under src and it works. "marcosbeirigo" answered it already. I do not know why I have to put that persistance.xml in there though. I put it under WebContent/META-INF and did not work
I had the same problem, i was keeping my persistence.xml file in the WebContent/META-INF directory, while the jpa specification says:
the root of the persistence unit is the WEB-INF/classes directory; the persistence.xml file is therefore contained in the WEB-INF/classes/META-INF directory
try placing persistence.xml under src/META-INF.
persistence.xml
should not be in your classpath; JAR file that containspersistence.xml
in its META-INF folder should.Your META-INF/persistence.xml file should look something like this:
Your persistence-unit's name attribute in your persistence.xml doesn't match the value you're passing into the Persistence.createEntityManagerFactory method. Make sure that your persistence-unit name is set to "IRCBotPU".
The error is somewhat misleading. the XML file itself should not be in the classpath; the part of the message saying "META-INF/persistence.xml" means that the directory containing META-INF/persistence.xml should be.
If your hard drive had the following
C:\libs\JPA\META-INF\Persistence.xml
then your classpath should include this
If META-INF\Persistence.xml were contained in foo.jar, assuming META-INF/Persistence.xml were located on the root folder of the jar, your classpath should have this
This may seem obvious or redundant but my goal is to make sure we're comparing apples to apples and the CLASSPATH, along with classloading, can be a bugger to deal with.
So, can you post your CLASSPATH?
if you are using
IntelliJ
or a maven project structure you need to place the entire"META-INF/persistence.xml"
file in the in resources(src/resources) folder so that it will move yourpersistence.xml
file into"WEB-INF/classes/persistence.xml"
location.if you are using
eclipse
or something else makes the changes accordingly so that it will move the file toWEB-INF/classes/persistence.xml
anything else did not work for me.