如何使用带有Hibernate的JPA在persistence.xml中仅创建新表?

时间:2017-05-19 07:28:31

标签: hibernate jpa persistence.xml

我的persistence.xml文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://xmlns.jcp.org/xml/ns/persistence
        http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="primary">
        <jta-data-source>java:jboss/datasources/LMSDS</jta-data-source>
        <properties>
            <property name="hibernate.event.merge.entity_copy_observer"
                value="allow" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        </properties>
    </persistence-unit>
</persistence>

如果我启动我的应用程序,则会创建表,因为hibernate.hbm2ddl.auto设置为create。如果我在我的应用程序中添加新实体,我不希望数据库中的现有数据丢失,但我想保留它并且只创建新表。

这怎么可能?

1 个答案:

答案 0 :(得分:1)

截至今天,使用Hibernate版本<= 5.2.x(JPA 2.0 / 2.1)可能 。根据设计(默认),您可以使用这些选项,请参阅official documentation

  • create - 从头开始​​创建关联的架构。
  • update - 更新现有架构。
  • validate - 验证JPA带注释的模型类是否符合现有架构。
  • create-drop - 创建架构并在JVM终止时自动删除它。

有关详细信息,请参阅此主题的earlier question

也许它值得研究Flyway,这为您提供了更好的管理架构迁移和升级路径的能力。 Vlad Mihalcea也就此主题撰写了good blog post