将 JPAContainer 与 Vaadin Framework 一起使用时,服务器重置时缺乏持久性

Lack of persistence on server reset while using JPAContainer with Vaadin Framework

我在我的 Vaadin(基于 GWT Java Web 应用程序框架)应用程序中使用 JPAContainer 实现。随着开发接近尾声,我 运行 遇到了一些小问题,所有这些都在一定程度上与持久性有关(因为实际上没有数据被放入数据库中,并且在我重新启动时全部丢失服务器)。

这里是我从 PERSISTENCE_UNIT

定义实体管理器的地方
private static JPAContainer<QueryableDicom> dicomDataContainer;    @PersistenceContext(unitName = "companynamedb")
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
transient EntityManager entityManager = entityManagerFactory.createEntityManager();

这就是我实例化 JPAContainer 的方式

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

这是我 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>

我不确定这是否有帮助,但这是我将实体添加到容器的方法:

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

我主要是在寻找有关查找位置的提示和技巧,我已经用谷歌搜索了两个星期了

您将持久性单元设置为在每次通过 "eclipselink.ddl-generation" 属性 值 "drop-and-create-tables" 部署持久性单元时删除和创建所有表。每次服务器重新启动时都会进行部署,这就解释了为什么会丢失数据。

此设置仅适用于可能存在与先前架构不兼容的剧烈实体更改的开发。您可能想要使用 "create" 或 "create-or-extend-tables",如 here

所述