愉快的使用JPA进行数据查询(七)@Query查询

当接口规范方法名查询也无法满足你的需求(很少遇到),我们还可以使用@Query注解配合HQL查询语句的方式,使用过Hibernate的开发者应该很熟悉HQL,十分接近SQL语法。

场景

删除所有名字中含有jules的学生。

编写接口

  @Query("delete from Student where name like ?1")
  int deleteStudentByName(String name);

?1代表使用第一个参数,Student不能使用表名,而是实体的名字(HQL规范)。
编写测试类

  @RequestMapping("deleteStudentByNameLike/{name}")
  public int deleteStudentByNameLike(@PathVariable("name") String name){
    String selectName = "%" + name + "%";
    int i = studentDao.deleteStudent(selectName);
    return i;
  }

这里有一点要非常注意,如果在Student类上的注解@Entity上指定了name值,则HQL中使用指定的name值作为实体名字!

编译一下,然后在浏览器输入:http://127.0.0.1:8080/deleteStudentByNameLike/jules
我们发现报错如下:

image.png

原因是update和delete需要使用@Modifying注解申明,加上这个注解,继续测试,发现还是报错:
image.png

这个就很好理解了,delete和update操作需要开启事务,我们再加上@Transactional注解,测试就成功了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,778评论 18 399
  • 一、Hibernate 检索 hibernate 提供5种检索数据的方式导航对象图检索方式: 根据已经加载的对象...
    luweicheng24阅读 394评论 0 0
  • 一. Java基础部分.................................................
    wy_sure阅读 3,839评论 0 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • SDWebImage托管在github上。https://github.com/rs/SDWebImage 这个类...
    Icec阅读 742评论 0 2