我试图在我的存储库中创建一个自定义deleteBy方法查询。
似乎休眠而不是删除,而是在执行一条select语句。

public interface ContactRepository extends JpaRepository<Contact, Integer> {

    Integer deleteByEmailAddress(String emailAddress);

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

这是Hibernate试图做的事情:



我想念什么?我必须进行特殊配置才能使删除工作吗?

最佳答案

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

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

  • 没有要删除的内容,请确保该记录在数据库中
  • 删除需要成为事务的一部分。我相信Spring数据CRUD ops默认情况下是事务性的,如果不只是确保调用deleteByEmailAddress的东西就是事务性

  • 注意:使用修改查询删除操作删除实体时,可以避免选择,例如:
    // NOTE: you have return void
    @Modifying
    @Transactional
    @Query(value="delete from Contact c where c.emailAddress = ?1")
    void deleteByEmailAddress(String emailAddress)
    

    10-01 05:00
    查看更多