Spring数据jpa deleteBy查询不起作用

Ale*_*rvu 16 java spring hibernate jpa spring-data-jpa

我正在尝试在我的存储库中创建自定义deleteBy方法查询.似乎hibernate不是删除,而是制作一个select语句.

public interface ContactRepository extends JpaRepository<Contact, Integer> {

    Integer deleteByEmailAddress(String emailAddress);

    //and this one works
    Contact findContactByName(String name);
}
Run Code Online (Sandbox Code Playgroud)

这是Hibernate试图做的事情:

Hibernate:选择contact0_.id为id1_2_,contact0_.emailAddress为> emailAdd2_2_,contact0_.name为name3_2_来自联系人contact0_ where> contact0_.emailAddress =?

我错过了什么?我是否必须进行特殊配置才能使删除工作?

iku*_*men 32

删除是否无效或无法正常工作?通常,在删除实体之前必须对其进行管理,因此JPA提供程序(在您的情况下为hibernate)将首先加载(您看到的查询)实体,然后发出删除.

如果您只看到查询,但没有相应的删除,那么有些可能性是:

  1. 没有什么可以删除,请确保数据库中有记录
  2. 删除需要成为事务的一部分.我相信Spring数据CRUD操作默认是事务性的,如果不是只是确保调用的deleteByEmailAddress是事务性的

注意:使用修改查询删除删除实体时可以避免选择,例如:

// NOTE: you have return void
@Modifying
@Transactional
@Query(value="delete from Contact c where c.emailAddress = ?1")
void deleteByEmailAddress(String emailAddress)
Run Code Online (Sandbox Code Playgroud)

  • 在使用@transactional注释方法后,它可以正常工作.谢谢你,先生!注意:它也适用于Query,但我只想要一个功能方法查询. (5认同)
  • 感谢`//注意:您已经返回void`-我会尽一切努力,但并未考虑这一点,这就是我的原因! (2认同)