我正在尝试在我的存储库中创建自定义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 =?
我错过了什么?我是否必须进行特殊配置才能使删除工作?
答案 0 :(得分:29)
删除是否无效或无法正常工作?通常,在删除实体之前必须对其进行管理,因此JPA提供程序(在您的情况下为hibernate)将首先加载(您看到的查询)实体,然后发出删除。
如果你只是看到了查询,但没有相应的删除,那么有些可能性是:
deleteByEmailAddress
的任何事务是事务性的注意:使用修改查询删除删除实体时可以避免选择,例如:
// 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)中,可以访问删除,删除和计数操作的查询派生。
答案 2 :(得分:-1)
尝试将Delete Query调用移到专用于它的服务类:
@FunctionalInterface
public interface DeleteService {
public int deleteIfExists(Date fechaProceso);
}
并在DeleteServiceImpl.java中实现它