當(dāng)接口規(guī)范方法名查詢也無法滿足你的需求(很少遇到),我們還可以使用@Query注解配合HQL查詢語句的方式,使用過Hibernate的開發(fā)者應(yīng)該很熟悉HQL,十分接近SQL語法。
場景
刪除所有名字中含有jules的學(xué)生。
編寫接口
@Query("delete from Student where name like ?1")
int deleteStudentByName(String name);
?1代表使用第一個參數(shù),Student不能使用表名,而是實體的名字(HQL規(guī)范)。
編寫測試類
@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
我們發(fā)現(xiàn)報錯如下:

image.png
原因是update和delete需要使用@Modifying注解申明,加上這個注解,繼續(xù)測試,發(fā)現(xiàn)還是報錯:

image.png
這個就很好理解了,delete和update操作需要開啟事務(wù),我們再加上@Transactional注解,測試就成功了。