2017-02-06 21 views
1

後述するように、私は、configファイルpersistence.xmlを持っている:としてjunitのJPA derby configは例外ですか?

<?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> 

と負荷永続コード:

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(); 
} 

しかし、私はcreateEntityManagerFactoryを呼び出していたとき、私は怒鳴る例外を取得しています:

スレッド "main" jの例外avax.persistence.PersistenceException:EntityManager名前付きエンティティの永続プロバイダがありません

どうすれば修正できますか?

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

編集:

+1

そして、あなたのCLASSPATHにEclipseLinkはあります?また、createQueryはJPQLクエリ用であり、 "SELECT * FROM entityTables"はJPQLではありません –

+0

HibernatePersistenceを使用する場合、クラスパスにクラスパスを追加する必要はありません。 –

+2

"彼はHibernateの永続性を使用する"場合、CLASSPATHにHibernateを持つ必要があります。 "彼はEclipseLinkを使用する"場合、彼はCLASSPATHにEclipseLinkを持たなければなりません。 FFS –

答えて

-1

<persistence-unit name="entity" transaction-type="RESOURCE_LOCAL">後、持続性プロバイダ名を使用するか、これがパッケージ化マニフェストのクラスパスに置く: - persistence.jar - eclipselink.jar

+0

JPLinkプロバイダとしてEclipseLinkを選択していることを意味しますか? –

+0

はい、この問題の原因となるEclipse永続性プロバイダかもしれません。 –

+1

その答えは、彼が使用するプロバイダを捨てることではありません。 WHYを調べることです。 –