美文网首页jpa
愉快的使用JPA进行数据查询(七)@Query查询

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

作者: 猪的尾巴 | 来源:发表于2017-07-27 00:40 被阅读177次

    当接口规范方法名查询也无法满足你的需求(很少遇到),我们还可以使用@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查询

        本文链接:https://www.haomeiwen.com/subject/oieakxtx.html