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 提供程序(在您的情况下为休眠)将首先加载(您看到的查询)实体,然后发出删除。
如果您只看到查询,但没有相应的删除,则可能是:
- 没有要删除的东西,确保数据库中有记录
- 删除需要是事务的一部分。我相信 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 中实施,例如
我正在尝试在我的存储库中创建自定义 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 提供程序(在您的情况下为休眠)将首先加载(您看到的查询)实体,然后发出删除。
如果您只看到查询,但没有相应的删除,则可能是:
- 没有要删除的东西,确保数据库中有记录
- 删除需要是事务的一部分。我相信 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 中实施,例如