25

我最近一直在简单地研究 JPA,我想知道数据库模式迁移和与您创建的类保持一致的情况是什么。

JPA 对这些东西有支持吗?公用事业?最佳实践?

干杯!

4

3 回答 3

11

我不会依赖 JPA 提供程序来更新数据库模式。检查Liquibase以了解其中一种好方法。

于 2010-03-29T00:53:28.423 回答
7

简短的回答是否定的。

如果更改 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...),您必须查阅他们的特定文档。

于 2010-01-20T13:17:22.187 回答
0

如果您将 设置generateDdl为 Hibernate(如果它是底层实现),那么它会根据您当前的方言生成数据库模式。所以改变方言后会自动生成数据库。

其他 JPA 提供程序可能对此具有不同的属性。

于 2010-01-14T14:41:26.420 回答