Spring数据jpa deleteBy查询不起作用

时间:2015-07-10 16:57:41

标签: 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);
}

这就是Hibernate试图做的事情:

  

Hibernate:选择contact0_.id为id1_2_,contact0_.emailAddress为&gt; emailAdd2_2_,contact0_.name为name3_2_来自联系人contact0_其中&gt; contact0_.emailAddress =?

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

3 个答案:

答案 0 :(得分:29)

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

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

  1. 没有要删除的内容,请确保db
  2. 中有记录
  3. 删除需要成为交易的一部分。我相信Spring数据CRUD操作默认是事务性的,如果不是只是确保调用deleteByEmailAddress的任何事务是事务性的
  4. 注意:使用修改查询删除删除实体时可以避免选择,例如:

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

答案 1 :(得分:4)

在Spring Data JPA的现代版本(&gt; = 1.7.x)中,可以访问删除,删除和计数操作的查询派生。

Spring Data: "delete by" is supported?

答案 2 :(得分:-1)

尝试将Delete Query调用移到专用于它的服务类:

@FunctionalInterface
public interface DeleteService {

    public int deleteIfExists(Date fechaProceso);

}

并在DeleteServiceImpl.java中实现它