代码之家  ›  专栏  ›  技术社区  ›  rgksugan

为什么我的数据不能持久化?

  •  1
  • rgksugan  · 技术社区  · 14 年前

    我在我的应用程序中使用JPA和Java嵌入式数据库。我试着将一些数据写入数据库,当我试着读回数据时,我就能做到。但应用程序已经关闭,当我再次打开它时,所有数据都不存在。

    这是我的持久性.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:德比:零用钱

    1 回复  |  直到 14 年前
        1
  •  3
  •   Pascal Thivent    14 年前

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

    • 使用绝对路径进行完全控制 jdbc:derby:/path/to/pocketmoney;create=true .
    • 检查数据是否写入(即文件是否更改)。
    • <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>
      
    • 再次检查您是否适当地提交了事务(您说您的代码正在做一些事情,但是您没有显示它,所以仍然存在疑问)。

    工具书类