愉快的使用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注解,测试就成功了。

你可能感兴趣的:(愉快的使用JPA进行数据查询(七)@Query查询)