专栏首页一个会写诗的程序员的博客spring data jpa @Query注解中delete语句报错 : @Modifying注解的使用spring data jpa @Query注解中delete语句报错

spring data jpa @Query注解中delete语句报错 : @Modifying注解的使用spring data jpa @Query注解中delete语句报错

spring data jpa @Query注解中delete语句报错

项目中需要删除掉表中的一些数据

@Query("delete from EngineerServices es where es.engineerId = ?1") int deleteByEgId(String engineerId); 但是提示了错误

org.hibernate.hql.QueryExecutionRequestException: Not supported for DML operations 通过查阅相关的资料发现,对于执行update和delete语句需要添加@Modifying注解

@Modifying @Query("delete from EngineerServices es where es.engineerId = ?1") int deleteByEgId(String engineerId); 不过,添加之后运行又出现了另一个错误

nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query 发现缺少Transaction,于是添加@Transactional

@Modifying @Transactional @Query("delete from EngineerServices es where es.engineerId = ?1") int deleteByEgId(String engineerId);

到此,这条delete语句终于可以成功的执行了。

代码示例:

package com.easy.kotlin.chapter11_kotlin_springboot.dao

import com.easy.kotlin.chapter11_kotlin_springboot.entity.Image
import org.springframework.data.domain.Page
import org.springframework.data.domain.Pageable
import org.springframework.data.jpa.repository.Modifying
import org.springframework.data.jpa.repository.Query
import org.springframework.data.repository.PagingAndSortingRepository
import org.springframework.data.repository.query.Param
import org.springframework.transaction.annotation.Transactional

/** Created by jack on 2017/7/17.

@Query注解里面的value和nativeQuery=true,意思是使用原生的sql查询语句.
sql模糊查询like语法,我们在写sql的时候是这样写的

like '%?%'

但是在@Query的value字符串中, 这样写

like %?1%

另外,要注意的是: 对于执行update和delete语句需要添加@Modifying注解
 */

interface ImageRepository : PagingAndSortingRepository<Image, Long> {
    @Query("SELECT a from #{#entityName} a where a.isDeleted=0 and a.category like %?1%")
    fun findByCategory(category: String): MutableList<Image>

    @Query("select count(*) from #{#entityName} a where a.isDeleted=0 and a.url = ?1")
    fun countByUrl(url: String): Int

    @Query("SELECT a from #{#entityName} a where a.isDeleted=0 and a.category like %:searchText%")
    fun search(@Param("searchText") searchText: String, pageable: Pageable): Page<Image>

    @Query("SELECT a from #{#entityName} a where a.isDeleted=0 and a.isFavorite=1")
    fun findAllFavorite(pageable: Pageable): Page<Image>

    @Query("SELECT a from #{#entityName} a where a.isDeleted=0 and a.isFavorite=1 and a.category like %:searchText%")
    fun searchFavorite(@Param("searchText") searchText: String, pageable: Pageable): Page<Image>

    @Modifying
    @Transactional
    @Query("update #{#entityName} a set a.isFavorite=1 where a.id=?1")
    fun addFavorite(id: Long)

    @Modifying
    @Transactional
    @Query("delete from #{#entityName} a where a.id=?1")
    fun delete(id: Long)

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • org.apache.ibatis.binding.BindingException: Mapper method '...' attempted to return null from a m...

    一个会写诗的程序员
  • Spring Data之@Query中的org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML

    Spring Data之@Query中的org.hibernate.hql.internal.QueryExecutionRequestException: N...

    一个会写诗的程序员
  • Kotlin 使用 Spring WebFlux 实现响应式编程 Kotlin 使用 Spring WebFlux 实现响应式编程参考资料

    IBM的研究称,整个人类文明所获得的全部数据中,有90%是过去两年内产生的。在此背景下,包括NoSQL,Hadoop, Spark, Storm, Kylin在...

    一个会写诗的程序员
  • Apache禁止目录访问方法介绍

    Java学习123
  • 数据库的优化方法,一般人我不告诉他(建议收藏)

    1、查询的时候尽量避免使用 * ,虽然在写sql语句的时候很方便,但是在执行sql语句的时候会耗费更多的内存和时间资源。

    程序员爱酸奶
  • BizTalk自定义证书加密/解密pipeline组件开发

        BizTalk自带有证书加密/签名的pipeline组件(MIME/SMIME),感觉配置比较复杂,而且不知道如何通过自己开发的客户端实现这种标准的加密...

    阿新
  • Spring Boot Repository查询条件关键字

    兜兜毛毛
  • spring data jpa

    … where x.lastname = ?1 and x.firstname = ?2

    gemron的空间
  • spring JPA相关命名规则

    汐楓
  • 一日一技:如何用Python遍历多个列表元素的所有组合

    在Python中,对于这种情况,有现成的处理方法,那就是 itertools.product计算可迭代对象的笛卡尔积。

    青南

扫码关注云+社区

领取腾讯云代金券