2009-08-04 48 views
3

我有一個Servlet插入到我的數據庫中。這工作正常。第二個Servlet顯示第一個插入的內容,但是每當我運行顯示Servlet時,我所有表中的所有記錄都將被刪除!我的JPA實現是EclipseLink,而數據庫是MySQL。JPA EntityManager刪除數據庫中的所有記錄

有可能我檢索EntityManagerFactory的方式觸發了數據庫模式的重新創建嗎?

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); 

我的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> 

回答

9

這是完全按照自己的懷疑。按照[EclipseLink的文檔(http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG))

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

使的EclipseLink刪除啓動所有表。

使用create-tables,而不是考慮。

+0

謝謝!我以爲這就是當你告訴了EclipseLink重新創建模式,而不是*每個*啓動。 – 2009-08-04 14:22:15