如何在Hibernate 3.0中实现mysql date_sub()函数

如何在Hibernate 3.0中实现mysql date_sub()函数,hibernate,Hibernate,在Hibernate中可以这样编写查询吗 SELECT * FROM `tablename` where created_at> DATE_SUB(curdate(),INTERVAL 7 DAY) 您可以使用 也可以使用Hibernate标准 您还可以扩展hibernate的mysql方言来支持date\u add函数 public class CommonMySQL5InnoDBDialect extends MySQL5InnoDBDialect { public Com

在Hibernate中可以这样编写查询吗

SELECT * FROM `tablename` where created_at> DATE_SUB(curdate(),INTERVAL 7 DAY) 
您可以使用

也可以使用Hibernate标准


您还可以扩展hibernate的mysql方言来支持date\u add函数

public class CommonMySQL5InnoDBDialect extends MySQL5InnoDBDialect {
    public CommonMySQL5InnoDBDialect() {
        super();
        //mysql date_add function support.
        registerFunction( "date_add_interval", new SQLFunctionTemplate( DateType.INSTANCE, "date_add(?1, INTERVAL ?2 ?3)" ) );
    }
}
然后可以在HQL中使用已注册的函数

from tablename where created_at > date_add_interval(curdate(), 7  DAY)

@anoopkattodi:yw,请注意,我编辑了我的答案,并修复了
Restrictions.sqlRestriction
的代码示例。这对我来说很有效,HQL:from tablename中有一个小的更改,其中创建了\u at>date\u add\u interval(curdate(),7,DAY)
String sql1 = "select  uh.ServiceDate from tablename  uh WHERE uh.ServiceDate >= DATE_SUB(curdate(), INTERVAL 1 YEAR)";

Query query1 = session.createSQLQuery(sql1);

 List result = query1.list();

         use this list in HQL

String queryString = "delete  from tablename  u  where  u.serviceDate in (:result)";
query =session.createQuery(queryString);
query.setParameterList("result", result);
public class CommonMySQL5InnoDBDialect extends MySQL5InnoDBDialect {
    public CommonMySQL5InnoDBDialect() {
        super();
        //mysql date_add function support.
        registerFunction( "date_add_interval", new SQLFunctionTemplate( DateType.INSTANCE, "date_add(?1, INTERVAL ?2 ?3)" ) );
    }
}
from tablename where created_at > date_add_interval(curdate(), 7  DAY)