【问题标题】:JPA EntityManager deletes all records in databaseJPA EntityManager 删除数据库中的所有记录
【发布时间】:2009-08-04 13:26:37
【问题描述】:

我有一个 Servlet 可以插入到我的数据库中。这工作正常。第二个 Servlet 显示第一个已插入的内容,但是每当我运行显示的 Servlet 时,我所有表中的所有记录都将被删除!我的 JPA 实现是 EclipseLink,数据库是 MySQL。

我检索 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>

【问题讨论】:

    标签: java jpa eclipselink


    【解决方案1】:

    正如你所怀疑的那样。根据 [EclipseLink docs](http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG))

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

    使 EclipseLink 在启动时删除所有表。

    考虑改用create-tables

    【讨论】:

    • 谢谢!我认为这是在您告诉 EclipseLink 重新创建架构时,而不是为 每个 启动。
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多