4

几乎所有内容都在标题中...启动应用程序时持久性工作正常,关闭应用程序时行仍在数据库中,但是一旦加载应用程序,行就被删除了...

我正在使用已经存在的数据库结构,通过 mysql5 SGBD。

似乎来自我的实体经理声明。这是我的几行代码,(实体管理器语句和persistence.xml)

entityManager 语句:

entityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory(resourceMap.getString("entityManager.persistenceUnit")).createEntityManager();
query = java.beans.Beans.isDesignTime() ? null : entityManager.createQuery(resourceMap.getString("query.query"));

持久性.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="AnalysesPU" transaction-type="RESOURCE_LOCAL">
    <provider>oracle.toplink.essentials.PersistenceProvider
    <class>solianceanalysesmanager.Produits
    <properties>
      <property name="toplink.jdbc.user" value="XXX"/>
      <property name="toplink.jdbc.password" value="X"/>
      <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/Analyses"/>
      <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
    </properties>
  </persistence-unit>
</persistence>

有人知道这个奇怪的问题原因吗?我已经有人建议我的 entityManager 在其声明中重新初始化持久性上下文......

PS:由于我是法国人,我可能会误用或拼错一些单词。随时要求我重新制定。

4

3 回答 3

2

默认情况下,TopLink Essentials 不会重新创建您的表,但这可以在您的 persistence.xml 中进行配置。

见, http://wiki.eclipse.org/EclipseLink/Examples/JPA/DDL

我猜你正在使用 Glassfish?我相信 Glassfish 在开发模式下默认会执行此操作,您需要配置一些 Glassfish 设置以避免这种情况。我不确定这是如何在 Glassfish 中配置的,也许其他人会这样做。

于 2011-02-15T14:10:36.077 回答
2

所以,问题是:尽管有 persistence.xml 设置,Netbeans 的默认行为是自动“删除并创建”策略。

构建项目后,使用 .jar 不会重置数据库表。

于 2011-02-15T15:28:37.690 回答
1

您的 persistence.xml 缺少一些属性定义...您必须向实体管理器指定如何表现,它将删除和创建参数作为默认设置。这就是为什么在加载应用程序时删除所有行的原因。尝试添加此行以更改 jpa 行为:

<property name="toplink.ddl-generation" value="create-tables"/>  
于 2011-03-31T18:39:16.750 回答