2009-08-04 9 views
3

J'ai une servlet qui insère dans ma base de données. Cela fonctionne bien. Une deuxième servlet affiche ce que le premier a inséré, cependant chaque fois que je lance la servlet d'affichage, tous les enregistrements dans toutes mes tables sont supprimés! Ma mise en œuvre JPA est EclipseLink et la base de données est MySQL.JPA EntityManager supprime tous les enregistrements dans la base de données

Est-il possible que la façon dont je récupère un EntityManagerFactory déclenche une reconstitution du schéma db?

EntityManagerFactory factory; 
factory = Persistence.createEntityManagerFactory("gate"); 
EntityManager em = factory.createEntityManager(); 

List list; 
try{ 
    Query query = em.createQuery("SELECT i from PersistentItem i"); 
    list= query.getResultList(); 

    System.out.println(list.size()); 

}finally{ 
     em.close(); 
    } 

Map<String, Object> myModel = new HashMap<String, Object>(); 
myModel.put("title", "List of all items"); 
myModel.put("itemList", list); 

return new ModelAndView("list", "model", myModel); 

Mon 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="gate" transaction-type="RESOURCE_LOCAL"> 
    <description>Eclipselink</description> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 

    <class>info.lenni.gate.persistence.PersistentItem</class> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties> 
     <property name="eclipselink.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
     <property name="eclipselink.jdbc.url" value="jdbc:mysql://localhost:3306/gate" /> 

     <property name="eclipselink.jdbc.user" value="root" /> 
     <property name="eclipselink.jdbc.password" value="" /> 

     <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 
     <property name="eclipselink.ddl-generation.output-mode" value="database" /> 
     <property name="eclipselink.logging.level" value="OFF"/> 
    </properties> 
</persistence-unit> 

Répondre

9

Il est exactement comme vous le pensez. Selon les [EclipseLink docs] (http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)) La ligne

<property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 

fait la EclipseLink supprimer toutes les tables au démarrage.

Pensez à utiliser create-tables à la place.

+0

Merci! Je supposais ceci est pour quand vous dites EclipseLink pour recréer le schéma, pas pour * chaque * démarrage. –

Questions connexes