首页 文章

使用内存中的hsqldb,hibernate和liquibase进行Junit测试

提问于
浏览
1

我正在尝试使用HSQLDB来运行某些集成测试 . 我用Spring . Hibernate用于设置数据库模式 . 然后我想用liquibase插入测试数据 .

我的问题是,虽然hibernate架构创建工作正常,但我得到:

liquibase.exception.DatabaseException: Error executing SQL INSERT INTO PUBLIC.OxAttributeType (id, "alias") VALUES ('1', 'varchar'): user lacks privilege or object not found: alias

当liquibase尝试启动它的插入时 .

我认为这可能是由于hsqldb在hibernate架构创建后关闭(并刷新),但我不确定 .

这是我的配置:

database.properties:

jdbc.driverClassName= org.hsqldb.jdbc.JDBCDriver
jdbc.url=jdbc:hsqldb:mem:oxandtestdatabase
jdbc.username: SA
jdbc.password:

Hibernate对象:

@Entity
@Table(name = "oxattribute")
public class Oxattribute implements java.io.Serializable {
private Integer id;
private String alias;

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
    return this.id;
}

public void setId(Integer id) {
    this.id = id;
}

@Column(name = "alias", nullable = false, length = 30)
public String getAlias() {
    return this.alias;
}
}

spring 配置:

<bean id="hibernateProperties"
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="properties">
        <props>
            <!-- <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> -->
            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
        </props>
    </property>
</bean>
<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
    <property name="dataSource" ref="dataSource" />
    <property name="changeLog" value="classpath:liquibase/testData.xml" />
</bean>

所以Hibernate正在工作,我可以在日志中看到:

Hibernate: create table oxattribute (id integer generated by default as identity (start with 1), alias varchar(30) not null, deletable boolean not null, description varchar(255), idOxAttributeType integer not null, idOxObject integer not null, primary key (id))

但是当liquibase开始插入时:

SEVERE 07/08/14 13:59: liquibase: classpath:liquibase/testData.xml: classpath:liquibase/testData.xml::insertMetadata::GCH: Change Set classpath:liquibase/testData.xml::insertMetadata::GCH failed.  Error: Error executing SQL INSERT INTO PUBLIC.OxAttributeType (id, "alias") VALUES ('1', 'varchar'): user lacks privilege or object not found: alias
liquibase.exception.DatabaseException: Error executing SQL INSERT INTO PUBLIC.OxAttributeType (id, "alias") VALUES ('1', 'varchar'): user lacks privilege or object not found: alias

有关信息,我的代码在mysql数据库上正常工作 . 谢谢你的帮助,纪尧姆

1 回答

  • 2

    更改使用的列的名称(“别名”是保留期限) . 你可以尝试添加反引号“” . @Column(名称= “alias`”) .

相关问题