2010-11-06 14 views
5

Indipendentemente dalla seguente configurazione persistence.xml, il database è persistente su disco.Come posso usare il derby in memoria con jpa2?

<persistence-unit name="com.mysimpatico_inmemory_persistence_nbm_1.0-SNAPSHOTPU" transaction-type="RESOURCE_LOCAL"> 
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
<class>com.mysimpatico.memoplatform.persistence.entities.Expression</class> 
<properties> 
    <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:tempDb;create=true"/> 
    <property name="javax.persistence.jdbc.password" value=""/> 
    <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/> 
    <property name="javax.persistence.jdbc.user" value=""/> 
</properties> 

http://wiki.apache.org/db-derby/InMemoryBackEndPrimer

risposta

9

Sto utilizzando Derby in memoria per il test e la mia configurazione è molto vicina alla tua.

Ecco il mio persistence.xml:

<?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_2_0.xsd" version="2.0"> 
    <persistence-unit name="TestPu" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <class>com.acme.Foo</class> 
    <class>com.acme.Bar</class> 
    <exclude-unlisted-classes>true</exclude-unlisted-classes> 
    <properties> 
     <!-- Common properties --> 
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:test-jpa;create=true"/> 
     <property name="javax.persistence.jdbc.user" value="APP"/> 
     <property name="javax.persistence.jdbc.password" value="APP"/> 

     <!-- EclipseLink specific properties --> 
     <property name="eclipselink.target-database" value="Derby"/> 
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
     <property name="eclipselink.debug" value="ALL"/> 
     <property name="eclipselink.weaving" value="static"/> 
     <property name="eclipselink.logging.level" value="FINEST"/> 
     <property name="eclipselink.logging.level.sql" value="FINEST"/> 
     <property name="eclipselink.logging.level.cache" value="FINEST"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

Dove org.apache.derby:derby:jar:10.6.2.1 è nel classpath.

ora due domande/suggerimenti:

  • Come fai a sapere il database viene mantenuto sul disco?
  • Se lo fa davvero, assicurati di utilizzare lo persistence.xml che pensi di essere.
+0

È solo per me o la persistenza xml di questa risposta non viene visualizzata correttamente? Ho anche provato a ripararlo, ma mostra male tutti allo stesso modo .. – Ben

4

Aggiungere il seguente alla configurazione di Maven

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-entitymanager</artifactId> 
    <version>3.3.2.GA</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.apache.derby</groupId> 
    <artifactId>derby</artifactId> 
    <version>10.5.3.0</version> 
    <scope>test</scope> 
</dependency> 

Il seguente persistance.xml funziona abbastanza bene con Hibernate.

+0

significa che non è possibile con eclipselink? – simpatico

+0

È sicuramente possibile, nulla ti costringe a passare in letargo. Il provider di persistenza non ha nulla a che fare con il tuo problema IMO. –

+0

Sì, ma si definisce tutto usando le proprietà di ibernazione invece di usare le proprietà javax.persistence. *. Questo lo rende completamente dipendente dall'ibernazione. Deve essere riscritto usando le proprietà generali javax.persistence. *. – Ben

Problemi correlati