2009-08-14 13 views
8
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(); 

} 
} 

Estoy recibiendo una excepción cuando trato de ejecutar esta claseJPA con TopLink: No META-INF/persistence.xml se encontró en la ruta de clase

javax.persistence.PersistenceException: No Persistence provider for EntityManager named IRCBotPU: 
    No META-INF/persistence.xml was found in classpath. 

META-INF/persistence.xml es en mi classpath. No sé cuál es el motivo o esta excepción.

La biblioteca de persistencia es TopLink.

+0

Sí tengo misma estructura – Switch

+2

@oxbow_lakes -. se podría haber arreglado :-) Acabo de hacer – ChssPly76

Respuesta

1

persistence.xml no debería estar en su classpath; El archivo JAR que contiene persistence.xml en su carpeta META-INF debería.

+0

sí lo es en la carpeta META-INF – Switch

+0

¿Cuál es el nombre del JAR que contiene una META-INF/persistence.xml ¿está? dijo JAR en sus aplicaciones CLASSPATH? –

+0

no, no es un archivo JAR que estoy usando NetBeans 6.0 por lo que sólo crea el paquete META-INF y en su interior persistence.xml. – Switch

0

Su archivo META-INF/persistence.xml debería ser algo como esto:

// <persistence> 
// <persistence-unit name="IRCBotPU"> 
//  <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider> 
//  <!-- All persistence classes must be listed --> 
//  <class>entity.Customer</class> 
//  <class>entity.Order</class> 
//  <class>entity.Item</class> 
//  <properties> 
//  <!-- Provider-specific connection properties --> 
//  <property name="toplink.jdbc.driver" value="<database driver>"/> 
//  <property name="toplink.jdbc.url" value="<database url>"/> 
//  <property name="toplink.jdbc.user" value="<user>"/> 
//  <property name="toplink.jdbc.password" value="<password>"/> 
//  <!-- Provider-specific settings --> 
//  <property name="toplink.logging.level" value="INFO"/> 
//  </properties> 
// </persistence-unit> 
// </persistence> 

atributo de nombre de su persistencia en su unidad de persistence.xml no coincide con el valor que está pasando en el Persistencia .createEntityManagerFactory método. Asegúrese de que su nombre de unidad de persistencia esté configurado en "IRCBotPU".

+0

Persis Nombre cia-unidad es correcta – Switch

2

El error es un poco engañoso. el archivo XML en sí debería no estar en el classpath; la parte del mensaje que dice "META-INF/persistence.xml" significa que el directorio que contiene META-INF/persistence.xml debe ser.

Si su disco duro tenía la siguiente

C: \ libs \ APP \ META-INF \ persistence.xml

entonces su ruta de clase debe incluir esta

CLASSPATH=c:\libs\JPA 

Si META-INF \ Persistence.xml estaban contenidos en foo.jar, suponiendo que META-INF/Persistence.xml estaban ubicados en la carpeta raíz del jar, su classpath debería tener este

CLASSPATH=C:\<path to jar>\foo.jar 

Esto puede parecer obvio o redundante, pero mi objetivo es asegurarme de que estamos comparando manzanas con manzanas y el CLASSPATH, junto con la carga de clases, puede ser un problema.

Entonces, ¿puedes publicar tu CLASSPATH?

+0

Mi ruta de clase se establece en la forma exacta que usted ha mencionado above.But todavía no va a funcionar. – Switch

+0

¿Está el tarro que contiene la aplicación de "IRCBotPU" en la ruta de clase? –

22

he tenido el mismo problema, yo estaba manteniendo mi archivo persistence.xml en el directorio WebContent/META-INF, mientras que la especificación JPA dice:
la raíz de la unidad de persistencia es el directorio/WEB-INF clases ; el archivo persistence.xml está por lo tanto contenido en el directorio WEB-INF/classes/META-INF
intente colocar persistence.xml bajo src/META-INF.

+0

en el eclipse siguientes trabajó para mí: src/META-INF/persistence.xml – Falaque

1

tengo una aplicación web y lo siguiente funcionó bien. Lo que hice fue añadir el directorio META-INF con el persistence.xml en la ubicación src/main/resources [proyecto Maven]

+0

Gracias, este fue el único que no funcionaba. –

0

creé una carpeta META-INF callled bajo src y funciona. "marcosbeirigo" ya lo respondió. No sé por qué tengo que poner ese persistance.xml allí.Me puse debajo de WebContent/META-INF y no funcionó

+0

Porque src está en el classpath, es por eso que funcionó. – Ben

2

si está utilizando intellij o una estructura de proyecto experto que necesita para colocar todo el archivo "META-INF/persistance.xml" en el de recursos (src/recursos) carpeta para que se moverá el archivo de persistence.xml en la ubicación "WEB-INF/classes/persistence.xml".

si está utilizando Eclipse o alguna otra cosa realiza los cambios necesarios para que se moverá el archivo WEB-INF/classes/persistence.xml"

cualquier otra cosa no funcionó para mí.

Cuestiones relacionadas