使用多个 where 子句在 spring 数据 jpa 中删除

Delete in spring data jpa with multiple where clause

我想从 MySQL table 中删除记录。

我在扩展JpaRepositoy 的接口中编写的查询是。

@Modifying
@Transactional
@Query(value="DELETE FROM tablename WHERE end_date>=?1 and username=?2 and start_date <=?3)
void deleteByStart_dateAndUsernameAndEnd_date(Date start_date,String username,Date end_date);

我想传递小于或等于end_date且end_date大于或等于start_date[=的start_date 24=].

我遇到以下异常:

org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [delete from com.poc.pa.model.tablename where end_date>=?1 and username=?2 and start_date <=?3]; nested exception is java.lang.IllegalStateException: org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [delete from com.poc.pa.model.tablename where end_date>=?1 and username=?2 and start_date <=?3]

如有任何帮助,我们将不胜感激。

我假设删除语句是一个 SQL 查询。因此,您必须在 Query 注释中声明它。只需添加 nativeQuery = true

@Transactional    
@Modifying
@Query(value="DELETE FROM tablename WHERE end_date>=?1 and username=?2 and start_date <=?3, 
    nativeQuery = true)
void deleteByStart_dateAndUsernameAndEnd_date(Date start_date,String username,Date end_date);