Странное поведение JPA: таблицы очищаются при загрузке приложения - PullRequest
4 голосов
/ 15 февраля 2011

Почти все в заголовке ... Постоянство работает нормально, когда приложение запускается, а строки остаются в БД, когда приложение закрывается, но после загрузки приложения строки удаляются ...

Я использую уже существующую структуру базы данных, через 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"));

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="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: Так как я француз, возможно, я неправильно использовал или неправильно написал некоторые слова.Не стесняйтесь просить меня переформулировать.

Ответы [ 3 ]

2 голосов
/ 15 февраля 2011

Итак, проблема заключалась в следующем: поведение NetBeans по умолчанию - это автоматическая стратегия «удаления и создания», несмотря на настройки файла persistence.xml.

После создания проекта использование .jar не приведет к сбросутаблица баз данных.

2 голосов
/ 15 февраля 2011

TopLink Essentials по умолчанию не воссоздает ваши таблицы, но это можно настроить в вашем файле persistence.xml.

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

Полагаю, вы используете Glassfish? Я считаю, что Glassfish делает это по умолчанию в режиме разработки, и есть некоторые настройки Glassfish, которые необходимо настроить, чтобы избежать этого. Я не уверен, как это настроено в Glassfish, хотя, возможно, кто-то еще делает.

1 голос
/ 31 марта 2011

ваш файл persistence.xml пропускает определение некоторых свойств ... вы должны указать менеджеру сущности, как вести себя, он принимает сброс и создает параметры в качестве настройки по умолчанию. вот почему все строки удаляются при загрузке приложения. попробуйте добавить эту строку, чтобы изменить поведение jpa:

<property name="toplink.ddl-generation" value="create-tables"/>  
...