在一個單元測試,我試圖刪除通過Spring的CrudRepository從我的數據庫中的條目,但它似乎像什麼也沒有發生。春CrudRepository刪除()什麼也不做
實體:
@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]
我試圖annoting我的@Rollback(假)的測試方法,但它似乎並沒有做任何區別。調用dao上的flush()會引發異常,表示沒有掛起的更新。
這樣做。我猜這個錯誤不會發生在生產中,因爲我可以使用容器管理的事務。 – Iavra