我在应用程序中使用JPA和Java Embedded DB。我尝试将一些数据写入数据库,当我尝试将其读回时,我能够做到。但是该应用程序已关闭,当我再次打开它时,没有任何数据存在。

这是我的persistence.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="myMoneyPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>mymoney.Money</class>
    <properties>
      <property name="eclipselink.jdbc.password" value="adminadmin"/>
      <property name="eclipselink.jdbc.user" value="admin"/>
      <property name="eclipselink.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
      <property name="eclipselink.jdbc.url" value="jdbc:derby:pocketmoney;create=true"/>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>


我的数据库URL是否有任何问题。


  jdbc:derby:pocketmoney

最佳答案

我的数据库URL是否有任何问题。


不,它是正确的,应该在当前工作目录中创建一个数据库。

一些调试问题的想法:


使用绝对路径进行完全控制jdbc:derby:/path/to/pocketmoney;create=true
检查数据是否已写入(即文件已更改)。
使用以下属性激活EcliseLink日志记录以查看正在发生的情况:

<properties>
  ...
  <property name="eclipselink.debug" value="ALL"/>
  <property name="eclipselink.logging.level" value="FINEST" />
  <property name="eclipselink.logging.level.sql" value="FINEST" />
  <property name="eclipselink.logging.level.cache" value="FINEST" />
</properties>

仔细检查您是否确实提交了事务(您说的是代码正在执行操作,但未显示它,因此仍然存在疑问)。


参考文献


Derby JDBC database connection URL
EclipseLink/Examples/JPA/Logging

07-24 19:19
查看更多