Java 将JPA容器与Vaadin框架一起使用时,服务器重置时缺少持久性

Java 将JPA容器与Vaadin框架一起使用时,服务器重置时缺少持久性,java,persistence,eclipselink,vaadin,jpacontainer,Java,Persistence,Eclipselink,Vaadin,Jpacontainer,我在我的Vaadin(基于GWT的Java web应用程序框架)应用程序中使用JPA容器实现。随着开发接近尾声,我遇到了一些小问题,所有这些问题都在某种程度上与持久性有关(例如,没有数据实际放入数据库中,每当我重新启动服务器时,所有数据都会丢失) 这里是我从持久性单元定义实体管理器的地方 private static JPAContainer<QueryableDicom> dicomDataContainer; @PersistenceContext(unitName = "

我在我的Vaadin(基于GWT的Java web应用程序框架)应用程序中使用JPA容器实现。随着开发接近尾声,我遇到了一些小问题,所有这些问题都在某种程度上与持久性有关(例如,没有数据实际放入数据库中,每当我重新启动服务器时,所有数据都会丢失)

这里是我从持久性单元定义实体管理器的地方

private static JPAContainer<QueryableDicom> dicomDataContainer;    @PersistenceContext(unitName = "companynamedb")
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
transient EntityManager entityManager = entityManagerFactory.createEntityManager();
以下是我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>

我主要是在寻找关于在何处查找的提示和提示,我已经在谷歌上搜索了两周了

每次通过“eclipselink.ddl generation”属性值“drop and create tables”部署持久化单元时,都会将持久化单元设置为删除并创建所有表。每次服务器重新启动时都会进行部署,这解释了丢失数据的原因


此设置仅适用于可能存在与先前架构不兼容的剧烈实体更改的开发。您可能希望使用“创建”或“创建或扩展表”,如JPA所述,您需要告知何时提交(意味着将更改写回磁盘/db)。谢谢,这解决了我遇到的问题!我不敢相信我以前没有注意到这一点。
<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>
entityManager.getTransaction().begin();
                    for (int i = 0; uploads[i] != null; i++) {
                        dicomDataContainer.addEntity(uploads[i]);
                    }
                    entityManager.getTransaction().commit();