我第一次使用最新的spring(4.0.4)和Hibernate(4.3.5)以及spring-data-jpa(1.6.0),并且无法让存储库在MySQL表上工作或者写入或者删除数据.它正在读取数据,但是当我尝试删除时,没有任何反应.如果我使用H2数据库,工作正常,但当我将数据源切换为MySQL服务器时,delete()停止工作.
问题1:当我使用MySQL数据源时,为什么CrudRepository子类不能从我的表实体中删除行,但如果我使用H2数据源,它可以使用相同的代码?
如果我在我的CrudRepository子类中创建这样的函数,我可以删除数据:
public interface MyEntityRepository extends CrudRepository<MyEntity, Long> {
@Modifying
@Query("delete from MyEntity where entity_id = ?1")
void delete(Long entityId);
@Modifying
@Query("delete from StageTeacher")
void deleteAll();
}
Run Code Online (Sandbox Code Playgroud)
我希望我遗漏一些简单的东西.但在我的单元测试类中,我有这个自动装配的存储库参考:
@Autowired
MyEntityRepository myEntityRepository;
Run Code Online (Sandbox Code Playgroud)
当我使用MySQL数据源时,这些命令什么也不做(它们甚至不会出现运行时错误):
myEntityRepository.deleteAll();
myEntityRepository.delete(myEntity.getId());
Run Code Online (Sandbox Code Playgroud)
这是2个数据源(H2已注释掉)和我使用此代码创建的实体管理器工厂:
@Bean
public EntityManagerFactory entityManagerFactory() throws SQLException {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://<host name>:3306/<schema name>");
dataSource.setUsername("<username>");
dataSource.setPassword("<password>");
/*
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
DriverManagerDataSource dataSource = builder.setType(EmbeddedDatabaseType.H2).build();
*/
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
// used when I have H2 enabled
//vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factory …Run Code Online (Sandbox Code Playgroud)