您好我必须在hibernate中编写一个查询
SELECT * FROM `tablename` where created_at> DATE_SUB(curdate(),INTERVAL 7 DAY)
在hibernate中。我已经发布了有关此主题的查询。但没有人帮助我。在hiberanate中可以写这样的查询吗?请回复。
答案 0 :(得分:8)
您可以使用native SQL query
String sql = "SELECT * FROM tablename WHERE created_at > DATE_SUB(curdate(), INTERVAL 7 DAY)"
Query query = session.createSQLQuery(sql);
List result = query.list();
或者您可以使用Hibernate Criteria Restrictions.sqlRestriction
String sqlWhere = "{alias}.created_at > DATE_SUB(curdate(), INTERVAL 7 DAY)";
Criteria criteria = session.createCriteria(MyEntity.class);
criteria.add(Restrictions.sqlRestriction(sqlWhere));
List result = criteria.list();
希望有所帮助。
答案 1 :(得分:2)
你也可以扩展hibernate的mysql Dialect来支持date_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)
答案 2 :(得分:0)
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);