我最近一直在简单地研究 JPA,我想知道数据库模式迁移和与您创建的类保持一致的情况是什么。
JPA 对这些东西有支持吗?公用事业?最佳实践?
干杯!
我不会依赖 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 提供程序可能对此具有不同的属性。