【发布时间】:2011-01-04 09:33:11
【问题描述】:
我最近一直在简单地研究 JPA,我想知道数据库架构迁移和与您创建的类保持一致是什么。
JPA 是否支持这些东西?公用事业?最佳实践?
干杯!
【问题讨论】:
-
我最近读了一本关于 JPA 的书。 JPA 2.1 于 2013 年发布,现在是否支持迁移?
标签: jpa schema-migration
我最近一直在简单地研究 JPA,我想知道数据库架构迁移和与您创建的类保持一致是什么。
JPA 是否支持这些东西?公用事业?最佳实践?
干杯!
【问题讨论】:
标签: jpa schema-migration
我不会依赖 JPA 提供程序来更新数据库模式。 查看Liquibase 了解其中一种好方法。
【讨论】:
简短的回答是否。
如果您更改 bean,则必须手动迁移现有架构。因此,对于 Rails 风格的数据库迁移,您将不得不寻找其他地方。
但是,您可以轻松地从 Java bean 生成初始 ddl。下面的示例说明了使用 EclipseLink 2.0 版创建模式:
<?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="JPATestPU" transaction-type="RESOURCE_LOCAL">
<provider>
org.eclipse.persistence.jpa.PersistenceProvider
</provider>
<class>org.randompage.MyEntity</class>
<properties>
<property name="javax.persistence.jdbc.user" value="johndoe"/>
<property name="javax.persistence.jdbc.password" value="secret"/>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:~/.h2/testdb;FILE_LOCK=NO"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.logging.level" value="INFO"/>
</properties>
</persistence-unit>
</persistence>
这里的关键元素是
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
这告诉 EclipseLink 删除现有表并从您的 JPA 映射中生成一次新表。此过程是高度特定于供应商的,因此对于其他 JPA 供应商(Hibernate、OpenJPA...),您必须查阅他们的特定文档。
【讨论】:
如果您将generateDdl 设置为Hibernate(如果它是底层实现),那么它会根据您当前的方言生成数据库模式。所以更改方言后会自动生成数据库。
其他 JPA 提供程序可能对此有不同的属性。
【讨论】: