當接口規范方法名查詢也無法滿足你的需求(很少遇到),我們還可以使用@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注解,測試就成功了。