在Java EE中,当使用JPA来持久化类时,我的persistance.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方法将一些值硬编码到used中。为此,该示例使用:
<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属性,它是否会使用填充数据获取现有表?或者根本不会没有表格而没有帮助? 如果我使用create-tables,我不会抛出异常吗?因为我试图使用的表已经存在。
感谢您的时间:)
答案 0 :(得分:0)
如果使用create-tables,EclipseLink将在部署时创建实体定义的表。如果使用drop-and-create-tables,则可能会遇到问题,因为它将首先尝试删除每个实体的表,然后重新创建它们。如果您重新部署应用程序或重新启动应用程序,这可能会导致您丢失数据。当测试每次启动时填充数据库时,这主要用于开发和测试。
如果使用EclipseLink 2.4(每晚构建),您还可以使用create-or-extend-tables,如果在重新部署时向实体添加字段,则会在现有表上使用alter table语句。