2009-08-04 10 views
3

データベースに挿入するサーブレットが1つあります。これはうまくいきます。 2番目のサーブレットは、最初のものが挿入されたものを表示しますが、表示するサーブレットを実行すると、すべてのテーブルのすべてのレコードが削除されます。 JPAの実装はEclipseLinkで、dbはMySQLです。JPA EntityManagerはデータベース内のすべてのレコードを削除します

EntityManagerFactoryを取得する方法が、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); 

私の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 –

関連する問題