Spring 数据 jpa deleteBy 查询不工作

Spring data jpa deleteBy query not working

我正在尝试在我的存储库中创建自定义 deleteBy 方法查询。 似乎 hibernate 没有删除,而是做了一个 select 语句。

public interface ContactRepository extends JpaRepository<Contact, Integer> {

    Integer deleteByEmailAddress(String emailAddress);

    //and this one works
    Contact findContactByName(String name);
}

这是 Hibernate 试图做的事情:

Hibernate: select contact0_.id as id1_2_, contact0_.emailAddress as >emailAdd2_2_, contact0_.name as name3_2_ from Contact contact0_ where >contact0_.emailAddress=?

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

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

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

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

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

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

在现代版本的 Spring Data JPA (>=1.7.x) 中可以访问删除、删除和计数操作的查询推导。

Spring Data: "delete by" is supported?

尝试将删除查询调用移动到服务 class 专用于它:

@FunctionalInterface
public interface DeleteService {

    public int deleteIfExists(Date fechaProceso);

}

并在 DeleteServiceImpl.java 中实施,例如