小编web*_*mer的帖子

不能在CrudRepository上使用delete()

我第一次使用最新的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)

java mysql spring jpa

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

jpa ×1

mysql ×1

spring ×1