首先,我想说我在编程学校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中的条目相匹配。老实说,我的(相当有限的)知识结束了。
那么每次启动应用程序时,是什么原因导致我的所有数据库内容都消失?
如果遗漏任何内容并且您需要更多信息,请告诉我,我会尽力证明这一点。
答案 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语句。