2016-07-28 4 views
1

Ich verwende die JPAContainer-Implementierung in meiner Vaadin-Anwendung (GWT-basiertes Java Web Application Framework). Ich habe in kleine Probleme geraten, da die Entwicklung zu einem Ende neigt, von denen alle zu einem Grad mit der Persistenz in Verbindung stehen (da keine Daten tatsächlich in der Datenbank abgelegt werden und alles verloren ist, wenn ich den Server neu starte).Mangelnde Persistenz beim Zurücksetzen des Servers bei Verwendung von JPAContainer mit Vaadin Framework

Hier ist, wo ich die Entity Manager aus der PERSISTENCE_UNIT definieren

private static JPAContainer<QueryableDicom> dicomDataContainer; @PersistenceContext(unitName = "companynamedb") 
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT); 
transient EntityManager entityManager = entityManagerFactory.createEntityManager(); 

Und das ist, wie ich meine JPAContainer instanziiert

dicomDataContainer = JPAContainerFactory.make(QueryableDicom.class, entityManager); 

Hier ist mein relevent Teil meiner persistence.xml:

<persistence-unit name="companynamedb"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties> 
     <property name="eclipselink.jdbc.platform" 
      value="org.eclipse.persistence.platform.database.H2Platform" /> 
     <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/./dcmCache" /> 
     <property name="javax.persistence.jdbc.user" value="user" /> 
     <property name="javax.persistence.jdbc.password" value="" /> 
     <property name="eclipselink.logging.level" value="FINE" /> 
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 
     <property name="eclipselink.ddl-generation.output-mode" 
      value="database" /> 
    </properties> 
</persistence-unit> 

Ich bin mir nicht sicher, ob das helfen wird, aber hier ist, wie ich hinzufügen Einheiten in den Behälter:

entityManager.getTransaction().begin(); 
        for (int i = 0; uploads[i] != null; i++) { 
         dicomDataContainer.addEntity(uploads[i]); 
        } 
        entityManager.getTransaction().commit(); 

Ich bin vor allem für Hinweise und Tipps auf, wo zu sehen Ich habe herum googeln jetzt für zwei Wochen

+0

Mit JPA müssen Sie sagen, wann zu commit (Mittel schreiben Änderungen zurück auf Festplatte/db) –

Antwort

1

Sie haben Ihre Persistenzeinheit so eingestellt, dass alle Tabellen gelöscht und neu erstellt werden, wenn die Persistenzeinheit über den Eigenschaftswert "drop-and-create-tables" der "eclipselink.ddl-generation" bereitgestellt wird. Die Bereitstellung erfolgt bei jedem Neustart des Servers, weshalb Sie Daten verlieren.

Diese Einstellung ist nur für die Entwicklung gedacht, wenn es zu drastischen Änderungen der Entitäten kommen kann, die nicht mit dem vorherigen Schema kompatibel sind. Sie möchten stattdessen "create" oder "create-or-extend-tables" wie beschrieben here

+0

Danke, das behoben das Problem, das ich hatte! Ich kann nicht glauben, dass ich das vorher nicht bemerkt habe. – Segualex

Verwandte Themen