相关疑难解决方法(0)

JPA/Hibernate对迁移的支持?

我目前正在使用JPA/Hibernate处理桌面应用程序,以便在H2数据库中保存数据.如果我出于某种原因需要在将来对数据库模式进行更改,我很好奇我的选择是什么.也许我将不得不引入新实体,删除它们或只是更改实体中的属性类型.

  • JPA/Hibernate是否支持这样做?
  • 我是否必须手动编写解决方案脚本?

java hibernate jpa h2

27
推荐指数
2
解决办法
2万
查看次数

如何在不使用hibernate.xml配置文件的情况下集成LiquiBase + Spring + Hibernate

我已经阅读了很多有关LiquiBase,Spring和Hibernate之间集成的帖子,但是没有一个适用于我的情况.

我正在开始一个使用Spring和Hibernate的新项目,因此我正在寻找一种在项目生命周期内管理数据库更改的方法.首先我开始使用hbm2ddl然后意识到人们说这在生产环境中不是一个好主意,所以我得出结论LiquiBase是要走的路(所以我认为).

问题是我没有使用hibernate.xml配置文件(我使用LiquiBase找到的所有示例都使用了hibernate.xml),因为我在我的POJO/DB类中使用java注释并且我的hibernate配置已经完成像这样

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() throws ClassNotFoundException
{
    LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();

    entityManagerFactoryBean.setDataSource(dataSource());
    entityManagerFactoryBean.setPackagesToScan(environment.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
    entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);

    Properties jpaProterties = new Properties();
    jpaProterties.put(PROPERTY_NAME_HIBERNATE_DIALECT, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
    jpaProterties.put(PROPERTY_NAME_HIBERNATE_FORMAT_SQL, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL));
    jpaProterties.put(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY));
    jpaProterties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
    jpaProterties.put(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO));

    entityManagerFactoryBean.setJpaProperties(jpaProterties);

    return entityManagerFactoryBean;
}
Run Code Online (Sandbox Code Playgroud)

我还发现2年前的帖子说这个选项只能在版本2.0(当前版本)中使用,我想知道这是否已经实现.如果是这样,我如何在ANT脚本中使用它?

我需要创建原始数据库DDL和以下数据库更改日志,并将它们导入生产数据库.

编辑:我正在使用:

Liquibase 2.0.5

Liquibase Hibernate 2.0.0

Hibernate 4.1.4

春季3.1.1

Spring Data JPA 1.1.1

ant spring annotations hibernate liquibase

8
推荐指数
1
解决办法
1万
查看次数

为多个模式中的实体生成Liquibase-hibernate changelog

我试图使用liquibase-hibernate5(Spring-5.0.4.RELEASE,Hibernate-5.2.15)通过liquibase-maven-plugin在Hibernate实体(来自单个基本包)和干净数据库(Oracle 11gR2 XE)之间生成差异.最后,JPA-2.1.1应用程序通过servlet 3.1与所有(完整)程序配置).我使用JSON作为更改日志格式,liquibase-hibernate5(v3.6)使用liquibase-maven-plugin(v3.5.5).配置中使用的JPA规范版本是2.1.1.来自POM的片段:

            <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>${liquibase.mvn.plugin.version}</version>
            <dependencies>
                <dependency>
                    <groupId>org.liquibase</groupId>
                    <artifactId>liquibase-core</artifactId>
                    <version>${liquibase.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.liquibase.ext</groupId>
                    <artifactId>liquibase-hibernate5</artifactId>
                    <version>${liquibase.hibernate.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-orm</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context-support</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.eclipse.persistence</groupId>
                    <artifactId>javax.persistence</artifactId>
                    <version>${jpa.version}</version>
                </dependency>
                <dependency>
                    <groupId>javax.validation</groupId>
                    <artifactId>validation-api</artifactId>
                    <version>${validation.api.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.oracle.jdbc</groupId>
                    <artifactId>ojdbc8</artifactId>
                    <version>${jdbc.driver.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.yaml</groupId>
                    <artifactId>snakeyaml</artifactId>
                    <version>${snakeyaml.version}</version>
                </dependency>
            </dependencies>
            <configuration>
                <propertyFile>src/main/resources/jdbc/schema/liquibase.properties</propertyFile>
                <propertyFileWillOverride>true</propertyFileWillOverride>
                <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>diff</goal>
                        <goal>update</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

这是我目前的liquibase.properties:

url: jdbc:oracle:thin:@localhost:1521/xe
username: db_user
password: password
driver: oracle.jdbc.OracleDriver
referenceUrl: hibernate:spring:org.example.something.entities?dialect=org.hibernate.dialect.Oracle10gDialect …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate liquibase liquibase-hibernate

5
推荐指数
0
解决办法
820
查看次数

标签 统计

hibernate ×3

java ×2

liquibase ×2

spring ×2

annotations ×1

ant ×1

h2 ×1

jpa ×1

liquibase-hibernate ×1