1

我在我的 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();

我主要是在寻找有关在哪里寻找的提示和技巧,我已经在谷歌上搜索了两个星期了

4

1 回答 1

1

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

此设置仅适用于可能存在与先前架构不兼容的剧烈实体更改时的开发。您可能希望使用“create”或“create-or-extend-tables”,如此处所述

于 2016-07-29T00:30:02.620 回答