代码之家  ›  专栏  ›  技术社区  ›  Gonçalo Cardoso

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

  •  8
  • Gonçalo Cardoso  · 技术社区  · 12 年前

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

    我正在启动一个使用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;
    }
    

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

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

    编辑: 我正在使用:

    液化碱2.0.5

    Liquibase休眠2.0.0

    休眠4.1.4

    弹簧3.1.1

    弹簧数据JPA 1.1.1

    1 回复  |  直到 12 年前
        1
  •  3
  •   vbence    11 年前

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