每次启动应用程序时都会删除数据库内容

时间:2014-10-23 14:12:21

标签: java glassfish-4 javadb

首先,我想说我在编程学校atm,并且在称为项目开发的课程中,我收到了来自老年人的半完成项目以继续。所以不用说我不明白这个项目并且与我缺乏经验相结合,我希望你能原谅我可能愚蠢的问题。

它是一个Maven Web应用程序,使用的语言是Java。该数据库是simpe JAVA DB(Derby),服务器是Glassfish 4.0。两者都在Netbeans 8.0环境中使用。

现在到了实际问题。该应用程序是一个在线调查问卷创建工具,因此用户可以创建问题,答案,上传图片等。它确实有效,一切都存储在数据库中并保持不变,我手动检查,数据在那里,并保持在那里关闭应用程序。但是,只要我重新启动应用程序,所有数据库内容都将丢失。然而,并非完全如此,似乎只有ID被删除,因为当我再次上传图片时,我上次会话中显示的旧图片(具有相同的ID)会出现。

Ofc,我的第一个想法是persistence.xml,我确实将Table Generation Strategy设置为“none”。 这是我的persistence.xml(EclipseLink(JPA 2.1)):

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="OnlineTestCreatorPU" transaction-type="JTA">
    <jta-data-source>jdbc/online_test_creator_db</jta-data-source>
    <properties>
    </properties>
  </persistence-unit>
</persistence>

这也没有解决问题,所以接下来我去了glassfish-ressources.xml并删除了“create = true”属性。这也没有解决它。

我从一位朋友那里听说,有时候程序没有正确地重建新设置,我必须确保它正确清理。所以我成功地清理了应用程序10次并再次构建所有内容并尝试但仍然没有结果。我还确保数据库名称与我的persistence.xml和glassfish-ressources.xml中的条目相匹配。老实说,我的(相当有限的)知识结束了。

那么每次启动应用程序时,是什么原因导致我的所有数据库内容都消失?

如果遗漏任何内容并且您需要更多信息,请告诉我,我会尽力证明这一点。

1 个答案:

答案 0 :(得分:1)

您可以查看不同的内容:

<强> 1

  

然而,只要我重新启动应用程序,所有数据库内容都会丢失。然而   不完全,似乎只有ID被删除,因为什么时候   我再次上​​传一张图片,旧的(具有相同的ID)我   上传的最后一个会话出现了。

启动后,您应确保哪些内容确实在数据库中。您可以通过浏览器缓存图片。要检查这一点,您应该单独启动数据库并检查内容。如果您使用NetBeans附带的Derby DB,则可以在NetBeans Services选项卡中执行此操作。

<强> 2

也许Derby配置了inmemory-mode,在这种模式下,所有数据库内容都完全存储在内存中,如果重新启动数据库则会丢失。您应该检查为持久性单元设置的JDBC URL。如果URL看起来类似于此

jdbc:derby://myhost:1527/memory:myDB;create=true

数据库配置了inmemory-mode。您可以通过特定Derby连接池的Additional Properties选项卡中的GlassFish管理GUI检查设置。

第3

您的应用程序中可能存在一些删除或覆盖旧数据库条目的逻辑。您可以通过激活SQL语句日志记录来轻松调试它。在persistence.xml添加以下内容:

<property name="eclipselink.logging.level" value="ALL"/>
<property name="eclipselink.logging.parameters" value="true"/>

如果您使用的是EclipseLink 2.4.0或更高版本:

<property name="eclipselink.logging.level.sql" value="ALL"/>
<property name="eclipselink.logging.parameters" value="true"/>

这将显示来自您的应用程序的所有SQL语句。