8

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

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

问题是我没有使用 hibernate.xml 配置文件(并且我发现使用 LiquiBase 的所有示例都使用 hibernate.xml),因为我在我的 POJO/DB 类中使用 java 注释并且我的休眠配置是像这样

@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;
}

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

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

编辑:我正在使用:

Liquibase 2.0.5

Liquibase 休眠 2.0.0

休眠 4.1.4

春天 3.1.1

春季数据 JPA 1.1.1

4

1 回答 1

3

你看过http://www.liquibase.org/documentation/spring.html吗?

它提到了 dataSource 并且没有 hibernate.xml。

对于初始生成,您可以使用命令行模式和generateChangeLog.

请参阅http://www.liquibase.org/documentation/command_line.html

hibernate.xfg.xml这是您将需要的最低要求:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory name="entityManagerFactoryBean">
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3307/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
    </session-factory>
</hibernate-configuration>
于 2012-08-23T14:36:51.057 回答