2012-04-11 13 views
0

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

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

おかげ

これはDAOのメソッドは、単に保存操作を呼び出す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(); 
} 

を拡張し、私のユニットテストの抜粋です。これは、これは私がこの自分自身を解決するために管理してきた私の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> 
+0

** ConfigAttribute **または** Operator **から** RuleDefinition **への逆マッピングがありますか? – ManuPK

答えて

0

の抜粋である私のマッピングファイル

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

です。私のCONFIG_RULE_DEFINITIONには、タイムスタンプ列がヌルでなくてはならず、デフォルトのSYSDATEにする必要があるという制約がありました。しかし、HSQLDBではSYSDATEは動作しません。なんらかの理由で、このようなエラーは私に通知するために伝えていませんでした。この制約を取り除くと、すべて正常に機能しました!

関連する問題