【问题标题】:How to integrate LiquiBase + Spring + Hibernate without using hibernate.xml configuration file如何在不使用 hibernate.xml 配置文件的情况下集成 LiquiBase + Spring + Hibernate
【发布时间】:2012-08-23 10:35:31
【问题描述】:

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

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

问题是我没有使用 hibernate.xml 配置文件(我发现使用 LiquiBase 的所有示例都使用 hibernate.xml),因为我在我的 POJO/DB 类和我的 hibernate 中使用了 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 Hibernate 2.0.0

休眠 4.1.4

春季 3.1.1

Spring Data JPA 1.1.1

【问题讨论】:

    标签: spring hibernate ant annotations liquibase


    【解决方案1】:

    你看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>
    

    【讨论】:

    • 是的,我已经看过这两个示例,但我的问题是要准确传递哪些参数,因为我希望 LiquiBase 从我的 POJO/DB 注释类而不是我的数据库中检索数据库更改.
    • 好的。现在我明白了。看看stackoverflow.com/questions/776787/…。这是完整的答案。您只需要虚拟的 hibernate.cfg.xml。
    • 假的 hibernate.cfg.xml 是什么意思?
    • 这是我的文件:hibernate.cfg.xml - pastebin.com/6Jeuwq8B ANT - pastebin.com/tcCGQx03 ApplicationContext.java pastebin.com/480cDi40
    • 他们的具体问题是什么?究竟是什么失败了?
    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2016-01-23
    • 2015-12-26
    • 1970-01-01
    • 2011-11-10
    相关资源
    最近更新 更多