ユニットテスト中にSpringのCrudRepositoryからデータベースからエントリを削除しようとしていますが、何も起こっていないようです。Spring CrudRepository delete()は何もしません
エンティティ:
@Entity @Table(name = "FACTION")
public class Faction implements Serializable
{
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", columnDefinition = "int", nullable = false, unique = true)
private Integer id;
public Integer getId()
{
return this.id;
}
}
リポジトリ:
public interface FactionDao extends CrudRepository<Faction, Integer>
{
}
私のテストクラス:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
@Sql({ "/delete-testData.sql", "/insert-testData.sql" })
public class TestFactionDao
{
@Autowired
private FactionDao dao;
@Test
public void testDelete()
{
System.out.println(this.dao.findOne(1));
this.dao.delete(1);
System.out.println(this.dao.findOne(1));
}
}
Spring構成:
@Configuration
@EnableJpaRepositories(basePackageClasses = Config.class)
@EnableTransactionManagement
public class Config
{
@Bean
public DataSource dataSource()
{
return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build();
}
@Bean
public PlatformTransactionManager transactionManager(DataSource pDataSource)
{
return new DataSourceTransactionManager(pDataSource);
}
@Bean
LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource pDataSource)
{
HibernateJpaVendorAdapter tJpaVendorAdapter = new HibernateJpaVendorAdapter();
tJpaVendorAdapter.setDatabase(Database.H2);
tJpaVendorAdapter.setGenerateDdl(true);
tJpaVendorAdapter.setShowSql(true);
LocalContainerEntityManagerFactoryBean tEntityManagerFactory = new LocalContainerEntityManagerFactoryBean();
tEntityManagerFactory.setJpaVendorAdapter(tJpaVendorAdapter);
tEntityManagerFactory.setDataSource(pDataSource);
tEntityManagerFactory.setPackagesToScan(Config.class.getPackage().getName());
return tEntityManagerFactory;
}
}
SQLスクリプト:以下
-- delete-testData.sql
delete from FACTION;
-- insert-testData.sql
insert into FACTION (ID) values
(1);
テストケース中にコンソール出力です。あなたが見ることができるように、何も削除操作が実行されていないと私はまだ私はちょうど削除実体を読むことができます:
Hibernate: create table FACTION (ID int generated by default as identity, primary key (ID))
Hibernate: select faction0_.ID as ID1_3_0_ from FACTION faction0_ where faction0_.ID=?
[email protected]
Hibernate: select faction0_.ID as ID1_3_0_ from FACTION faction0_ where faction0_.ID=?
Hibernate: select faction0_.ID as ID1_3_0_ from FACTION faction0_ where faction0_.ID=?
[email protected]
私は@Rollback(偽)と私のテスト方法をannoting試してみましたが、いずれかを作るようには見えません差。 daoのflush()を呼び出すと、保留中の更新がないという例外がスローされます。
それはそれをしました。私はコンテナ管理のトランザクションを使用することができるので、エラーは生産で発生していないと思います。 – Iavra