使用多个where子句在spring数据jpa中删除
Posted
技术标签:
【中文标题】使用多个where子句在spring数据jpa中删除【英文标题】:Delete in spring data jpa with multiple where clause 【发布时间】:2018-07-09 06:49:38 【问题描述】:我想从 mysql 表中删除记录。
我在扩展 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。
我遇到了以下异常:
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]
任何帮助将不胜感激。
【问题讨论】:
我正在尝试使用上述查询执行删除操作。我想传递小于或等于 end_date 且 end_date 大于或等于 start_date 的 start_date 。 对不起,我的评论无关紧要, 因为它是一个 DML 语句,它似乎有写入操作的问题(根据异常消息)。您能否检查一下您是否有正确的导入:org.springframework.transaction.annotation.Transactional 和 org.springframework.data.jpa.repository.Modifying。您还可以检查您提到的连接到数据库的凭据是否应该在数据库上具有写入权限 【参考方案1】:我假设删除语句是一个 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);
【讨论】:
以上是关于使用多个where子句在spring数据jpa中删除的主要内容,如果未能解决你的问题,请参考以下文章
如何使用条件(where子句)更新实体并在spring数据jpa中的方法响应中获取更新的实体
Spring数据JPA findFirst用where子句(过滤)和order by,抛出内部异常