views:

71

answers:

3

I am newbie with JPA. I'm trying to run some sample code using JPA but I get the following exception:

javax.persistence.PersistenceException: No Persistence provider for EntityManager named MyJPAApplicationPU

I put my exception message here,

INFO: Could not find any META-INF/persistence.xml file in the classpath
javax.persistence.PersistenceException: No Persistence provider for EntityManager named MyJPAApplicationPU
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
        at com.myJpa.TestJPA.setUp(TestJPA.java:30)
        at com.myJpa.TestJPA.main(TestJPA.java:72)

Any help would be appreciated.

+1  A: 

For JPA to work, you need META-INF/persistence.xml. I will assume this is a web-app, so this folder has to be in WEB-INF/classes/.

The persistence.xml file would look like this:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
        version="1.0">

  <persistence-unit name="MyJPAApplicationPU" transaction-type="RESOURCE_LOCAL">

  </persistence-unit>

</persistence>
Bozho
Hi to all,Thanks for your efforts and solutions.But now i solved the above issue and got new one,That is, the entity doesn't has the field[firstname='m'].What is the reason for this?And how can i resolve this issue?
Muneeswaran Balasubramanian
+3  A: 

Well, the error is self explaining, you need to provide a META-INF/persistence.xml to use JPA. This file is used to define a "persistence unit". From the JPA 1.0 specification:

6.2.1 persistence.xml file

A persistence.xml file defines a persistence unit. It may be used to specify managed persistence classes included in the persistence unit, object/relational mapping information for those classes, and other configuration information for the persistence unit and for the entity manager(s) and entity manager factory for the persistence unit. The persistence.xml file is located in the META-INF directory of the root of the persistence unit. This information may be defined by containment or by reference, as described below.

Here is a sample persistence.xml for a Java SE environment (using Hibernate as JPA provider):

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
  version="1.0">
    <persistence-unit name="MyJPAApplicationPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.mycompany.Foo</class>
        <class>com.mycompany.Bar</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.connection.provider_class" value="org.hibernate.connection.DriverManagerConnectionProvider" />
            <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:unit-testing-jpa"/>
            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.connection.username" value="sa"/>
            <property name="hibernate.connection.password" value=""/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

Some comments about the above file:

  • when running in a Java SE environment, you cannot rely on JTA and the transaction type must be RESOURCE_LOCAL (which is actually the default in a Java SE environment but specifying it make it more clear).
  • when running in a Java SE environment, you cannot use a JDNI data source and the provider will obtain connections directly from the JDBC driver so you must pass the relevant informations to the provider (driver class name, connection url, user, password). With JPA 1.0 the properties used to pass these metadata are provider specific.
  • To insure the portability of a Java SE application, it is necessary to explicitly list the managed persistence classes that are included in the persistence unit.
Pascal Thivent
A: 

Hi to all,

Thanks for your efforts and solutions.But now i solved the above issue and got new one, That is,

the entity doesn't has the field[firstname='m']. What is the reason for this?And how can i resolve this issue?

Muneeswaran Balasubramanian
This is an entirely different problem so please open a new question (one question = one problem) and delete this answer (it is not an answer). Thank you in advance.
Pascal Thivent