Как реализовать функцию mysql date_sub () в Hibernate 3.0 - PullRequest
2 голосов
/ 28 декабря 2011

Привет мне нужно написать запрос в спящем режиме, как

SELECT * FROM `tablename` where created_at> DATE_SUB(curdate(),INTERVAL 7 DAY) 

в спящем режиме. Я уже разместил запрос по этой теме. Но никто не помогает мне. Можно ли в hiberanate написать запрос, подобный этому? Пожалуйста, ответьте.

Ответы [ 3 ]

8 голосов
/ 28 декабря 2011

Вы можете использовать собственный SQL-запрос

String sql = "SELECT * FROM tablename WHERE created_at > DATE_SUB(curdate(), INTERVAL 7 DAY)"
Query query = session.createSQLQuery(sql);
List result = query.list();

Или использовать критерии Hibernate 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();

Надеюсь, это поможет.

2 голосов
/ 25 мая 2016

Вы также можете расширить mysql диалект hibernate для поддержки функции 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.

0 голосов
/ 04 апреля 2013
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...