2017-02-06 5 views
1

Ich habe eine Config-Datei persistence.xml wie unten erwähnt:Ausnahme JPA Derby Config für Junit?

<?xml version="1.0" encoding="UTF-8" ?> 
<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_2_0.xsd" 
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> 
<persistence-unit name="entity" 
    transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <validation-mode>NONE</validation-mode> 
     <properties> 
     <property name="javax.persistence.jdbc.driver"  value="org.apache.derby.jdbc.EmbeddedDriver" /> 
      <property name="javax.persistence.jdbc.url" 
      value="jdbc:derby:src/test/resources/sql/entityDB;create=true" > 
     <!-- EclipseLink should create the database schema automatically --> 
     <property name="eclipselink.ddl-generation" value="create-tables" /> 
     <property name="eclipselink.ddl-generation.output-mode" 
      value="database" /> 
     <property name="eclipselink.logging.level" value="ALL" /> 
    </properties> 
</persistence-unit> 

und Persistenz-Code laden, wie:

public static void main(String[] args) {  
    String persistenceUnit = "entity"; 
    Properties pros = new Properties(); 
    pros.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, 
     "src/test/resources/META-INF/persistence.xml"); 
    // Get the entity manager for the tests. 
    entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnit,pros); 
    entityManager = entityManagerFactory.createEntityManager(); 
    Query q = entityManager.createQuery("select * from entityTables"); 
    List<Entity> todoList = q.getResultList(); 

    entityManager.close(); 
} 

Aber wenn ich createEntityManagerFactory nenne ich dir die Ausnahme bin immer:

Ausnahme im Thread "Haupt" j avax.persistence.PersistenceException: Kein Persistence Provider für EntityManager namens entity

Wie kann ich das beheben?

+1

Und ist Eclipse in CLASSPATH ? Auch createQuery ist für JPQL-Abfragen und "SELECT * FROM entityTables" ist nicht JPQL –

+0

er muss es nicht im Klassenpfad hinzufügen, wenn er die HibernatePersistence verwendet. –

+2

Wenn er "Hibernate persistence" verwendet, muss er im CLASSPATH Hibernate haben. Wenn er "EclipseLink" benutzt, muss er EclipseLink im CLASSPATH haben. FFS –

Antwort

-1

Nach <persistence-unit name="entity" transaction-type="RESOURCE_LOCAL">, verwenden Sie die Persistenz-Provider Name:

<provider>org.hibernate.ejb.HibernatePersistence</provider> 

Edit: oder im Classpath des Manifests setzen diese Pakete: - persistence.jar - eclipselink.jar

+0

du meinst die Zeile, die er bereits hat, EclipseLink als JPA-Provider auswählend? –

+0

Ja, möglicherweise der Persistenzanbieter Eclipse, der dieses Problem verursacht. –

+1

Die Antwort darauf ist nicht, den Provider, den er benutzt, wegzuwerfen; es ist zu untersuchen, warum. –