我的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
。如果我在我的应用程序中添加新实体,我不希望数据库中的现有数据丢失,但我想保留它并且只创建新表。
这怎么可能?
答案 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。