0

レガシーコードに苦労しています。単体テストを作成しているので、groovyを使用してデータベースに必要なレガシーデータを入力することにしました。通常、私のコードでは、永続性のためにibatisを使用しています。最後にテストをロールバックしたいと思います。問題は、groovyを介して行を作成するときに、そのIDを使用してibatisを介して行を作成すると、制約違反の例外が発生することです。親キーが見つかりません。

groovyを使用して親を永続化し、親IDに基づいて子を作成すると、完全に正常に機能します。

また、XMLパーサー(レガシーコードFTW:/)に問題があるため、@Transactionalを使用できません。

@ContextConfiguration(locations = [ "../dao/impl/ibatis/spring-data-context-config.xml",  "classpath:/pl/com/betacom/treq/dao-context.xml"])
@RunWith(SpringJUnit4ClassRunner.class)

public class FinancingForIltCreationTest {

@Autowired
IFinancingForIltDAO financingForIltDAO;

@Autowired
Sql sql;

@Autowired
DataSourceTransactionManager transactionManager;

private TransactionStatus transactionStatus;

@Before
public void setUp() {
    transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());
}

@After
public void tearDown() {
    transactionManager.rollback(transactionStatus);
    transactionStatus = null;
}

@Test
public void shallCreateFinancingForIlt() throws Exception {
    //given
    IltOffering offering = new IltOffering("GOING_DOWN_TO_UBERGROUND", offeringTempId, java.sql.Date.valueOf("2011-07-21"), java.sql.Date.valueOf("2012-07-21"));
    offering.insert(sql); // it's inserted by groovy
    //when
    FinancingForIltDTO financingForIltDTO = createFinancingForIlt(offering.id).build(financingForIltDAO); // it's my assembler inserting via iBatis
    //then
    assertNotNull(financingForIltDTO.id);
}

構成は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSourceIn"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName">
        <value>####</value>
    </property>
    <property name="url">
        <value>####</value>
    </property>
    <property name="username">
        <value>####</value>
    </property>
    <property name="password">
        <value>####</value>
    </property>
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
    <constructor-arg ref="dataSourceIn" />
</bean>


<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
        <ref local="dataSource" />
    </property>
</bean>


<bean id="sql" class="groovy.sql.Sql">
    <constructor-arg ref="dataSource" />
</bean>

4

1 に答える 1

0

残念ながら、これはデータベーススキーマの問題でした。

于 2012-07-10T10:03:44.517 に答える