使用JPA支持模式迁移?

bra*_*ter 25 jpa schema-migration

我最近一直在简短地看JPA,我想知道数据库架构迁移的交易是什么,并且与你创建的类保持一致.

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

干杯!

lex*_*ore 11

我不会依赖JPA提供程序来更新数据库模式.检查Liquibase的一个好方法.


Lar*_*ann 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>
Run Code Online (Sandbox Code Playgroud)

这里的关键因素是

 <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
Run Code Online (Sandbox Code Playgroud)

这告诉EclipseLink删除现有表并从JPA映射中生成一次新表.此过程特定于供应商,因此对于其他JPA供应商(Hibernate,OpenJPA ...),您必须查阅其特定文档.


Boz*_*zho 0

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

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

  • 通过模式迁移,我相信 OP 意味着拥有可以获取现有数据库数据并使其与新实体/模式保持同步的脚本。通常,这涉及仔细研究模式更改,有时还需要卸载/重新加载数据,以便可以更改 FK、拆分 PK 等。Hibernate 可以生成一个脚本来创建新模式。Hibernate 还可以生成一个脚本来修改旧模式,使其成为新模式,但它假设数据库没有数据——即使如此,我的理解是,由于“问题”,该功能很少被使用。 (7认同)
  • 这是正确的,但它没有解决架构迁移的问题。 (2认同)