在 Java EE 中,当使用 JPA 持久化类时,我的 persistence.xml 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="JMonks_Crud">
<jta-data-source>jdbc/example</jta-data-source>
<class>models.Class1</class>
<class>models.Class2</class>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
</properties>
</persistence-unit>
</persistence>
到目前为止,我对 JPA 的唯一经验来自一个应该清除数据库中所有值的示例,然后有 servlet 的 post 方法将一些值硬编码到使用的值中。为此,该示例使用:
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
但是,我想在会话之间将数据保存在数据库中(就像任何好的动态站点一样),我不知道在 value 属性中放入什么来完成此操作。wikia 站点 (http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#Using_EclipseLink_JPA_Extensions_for_Schema_Generation) 说,它可以在这个值中放置三个不同的值:
- none – EclipseLink 不生成 DDL;没有生成模式。
- create-tables – EclipseLink 将尝试为每个表执行 CREATE TABLE SQL。如果表已经存在,EclipseLink 将遵循特定数据库和 JDBC 驱动程序组合的默认行为(当为已经存在的表发出 CREATE TABLE SQL 时)。在大多数情况下,会引发异常并且不会创建表。然后 EclipseLink 将继续执行下一条语句。(另请参见 eclipselink.create-ddl-jdbc-file-name。)
- drop-and-create-tables – EclipseLink 将尝试删除所有表,然后创建所有表。如果遇到任何问题,EclipseLink 将遵循特定数据库和 JDBC 驱动程序组合的默认行为,然后继续执行下一条语句。(另请参见 eclipselink.create-ddl-jdbc-file-name 和 eclipselink.drop-ddl-jdbc-file-name。)
如果我使用 none 属性,它会抓取包含填充数据的现有表吗?还是没有人根本不做桌子,也无济于事?如果我使用创建表,我不会抛出异常吗?因为我尝试使用的表已经存在。
谢谢你的时间 :)