一.前言 最近在做一個定時任務,具體為定時清理掉mysql中存儲的,一個月前的數據.而在hql語句中,就需要調用mysql的date_add()方法. 但是在hibernate中,是不允許使用各個SQL特有的方法的. 但是需求上是需要的.那麼就可以自定義一個Mysql Dialect(方言),然後增 ...
一.前言
最近在做一個定時任務,具體為定時清理掉mysql中存儲的,一個月前的數據.而在hql語句中,就需要調用mysql的date_add()方法.
但是在hibernate中,是不允許使用各個SQL特有的方法的.
但是需求上是需要的.那麼就可以自定義一個Mysql Dialect(方言),然後增加你需要的mysql方法就可以了.
註意的是別忘記在hibernate.cfg.xml中加上
<property name="dialect"> <!-- 你自己自定義的Dialect --> xxx.xxx.MysqlDialect </property>
二.配置MysqlDialect
//繼承hibernate中的MySQLDialect public class MysqlDialect extends MySQLDialect{ public MysqlDialect() { super(); //註冊一個方法,叫做date_add_interval.使用mysql原有的date_add方. //參數mysql特有的寫死在裡面,如INTERVAL,MONTH registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_add(?1, INTERVAL ?2 MONTH)")); } }
然後你在hibernate.cfg.xml中配置好了之後,就可以在hql中使用date_add_interval方法了.如下
//刪除一個月前的數據 DELETE FROM xxx WHERE updatetime < date_add_interval(CURDATE(), -1)