0

以下の単体テストでフラッシュを試行すると、「データベースの状態をセッションと同期できませんでした」というメッセージが表示されます。

私が完全に迷子になっているので、誰かが問題が何であるかをアドバイスできますか?属性を設定せずにRuleDefinitionを作成しようとしましたが、それも機能しません。

ありがとう

これは、AbstractTransactionalDataSourceSpringContextTestsを拡張する単体テストのスニペットです。

@Test
public void testCreateRule() {
    RuleDefinition ruleReturned = (RuleDefinition) hibernateRuleDefinitionDao.findRule(1);
    RuleDefinition newRule = new RuleDefinition();
    newRule.setCurrentState("ACTIVE");
    newRule.setAttribute(ruleReturned.getSecondaryAttribute());
    newRule.setSecondaryAttribute(ruleReturned.getAttribute());
    newRule.setOperator(ruleReturned.getOperator());
    newRule.setPrecedence(4);
    hibernateRuleDefinitionDao.createRule(newRule);
    // Exception is thrown after the flush
    hibernateTemplate.flush();   
}

DAOメソッドは単に保存操作を呼び出します。これは私のマッピングファイルです

<class name="abc.def.rules.RuleDefinition" table="REFDATA.CONFIG_RULE_DEFINITION">
    <id name="ruleId" column="RULE_ID">
        <generator class="increment"/>
    </id>
    <many-to-one name="attribute" cascade="none" class="abc.def.rules.ConfigAttribute" lazy="false" column="CONFIG_ATTR_ID"/>
    <many-to-one name="operator" cascade="none" class="abc.def.rules.Operator" lazy="false">
        <column name="OPRTR_VAL"/>
        <column name="OPRTR_VAL_DATA_TYP"/>
    </many-to-one>
    <many-to-one name="secondaryAttribute" cascade="none" class="abc.def.rules.ConfigAttribute" lazy="false" column="CONFIG_ATTR_ID_2" not-null="false"/>
    <property name="operand" column="OPRND_VAL" type="string"/>
    <property name="trueAction" column="TRUE_ACTN" type="string"/>
    <property name="falseAction" column="FALSE_ACTN" type="string"/>
    <property name="precedence" column="RULE_ORD_SEQ" type="int" not-null="true"/>
    <property name="currentState" column="RULE_STAT" type="string"/>
</class>

これは私のSpring構成ファイルのスニペットです

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url" value="jdbc:hsqldb:mem:testdb" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocations">
        <list>
            <value>classpath:abc\def\hibernate-reference.cfg.xml</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">
                org.hibernate.dialect.HSQLDialect
            </prop>
            <prop key="hibernate.cache.provider_class">
                org.hibernate.cache.NoCacheProvider
            </prop>
            <prop key="hibernate.cache.use_second_level_cache">
                false
            </prop>
            <prop key="hibernate.cache.use_query_cache">false</prop>
        </props>
    </property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
4

1 に答える 1

0

私はこれを自分で解決することができました。私のCONFIG_RULE_DEFINITIONには、タイムスタンプ列がnullではなく、デフォルトでSYSDATEになるように指定する制約がありました。ただし、SYSDATEはHSQLDBでは機能しないと思います。何らかの理由で、そのようなエラーは私にこれを通知するために伝播していませんでした。この制約を削除すると、すべて正常に機能しました。

于 2012-04-13T02:19:09.917 に答える