2009-08-04 3 views
3

데이터베이스에 삽입하는 서블릿이 하나 있습니다. 이것은 잘 작동합니다. 두 번째 서블릿은 첫 번째 서블릿이 무엇을 삽입했는지 표시합니다. 그러나 서블릿을 표시 할 때마다 내 모든 테이블의 모든 레코드가 삭제됩니다! 내 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

그것은 정확히. http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG))

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

은 EclipseLink가 시작시 모든 테이블을 삭제하게 선합니다 ([EclipseLink가 워드 프로세서]에 따르면.

하는 대신 create-tables을 사용하는 것이 좋습니다.

+0

감사합니다! 나는 이것이 당신이 말할 때입니다 가정 EclipseLink는 모든 스타트 업을위한 것이 아니라 스키마를 다시 생성합니다. –

관련 문제