Hibernate 或 HQL Select 另一个 SELECT 的结果
Hibernate or HQL Select on the result of another SELECT
有没有办法在以下查询中使用 HQL?
SELECT userId, pwd, pwdDate FROM
(SELECT userId, AES_DECRYPT(pwd, 'key_str') as pwd, pwdDate
FROM UserHistory order by pwdDate desc limit 5 ) AS A
WHERE pwd = :pwd
以下有效。
SELECT *
FROM UserHistory order by pwdDate desc limit 5
上面的sql在hibernate中可以是下面的
Criteria criteria = session.createCriteria(UserHistory.class);
criteria.addOrder(Order.desc("pwdDate"));
List<UserHistory> list = criteria.setMaxResults(5).list();
以下有效。关键是为本机 SQL.
创建SQL查询
String SQL =
"SELECT A.* FROM \n" +
"(select * \n" +
" from user_history$ order by pwdDate desc limit 5 ) AS A \n" +
"where pwd = AES_ENCRYPT(:pwd, 'key_str') \n";
Query query = session.createSQLQuery(SQL);
query.setParameter("pwd", psw);
List<UserHistory> list = query.list();
有没有办法在以下查询中使用 HQL?
SELECT userId, pwd, pwdDate FROM
(SELECT userId, AES_DECRYPT(pwd, 'key_str') as pwd, pwdDate
FROM UserHistory order by pwdDate desc limit 5 ) AS A
WHERE pwd = :pwd
以下有效。
SELECT *
FROM UserHistory order by pwdDate desc limit 5
上面的sql在hibernate中可以是下面的
Criteria criteria = session.createCriteria(UserHistory.class);
criteria.addOrder(Order.desc("pwdDate"));
List<UserHistory> list = criteria.setMaxResults(5).list();
以下有效。关键是为本机 SQL.
创建SQL查询String SQL =
"SELECT A.* FROM \n" +
"(select * \n" +
" from user_history$ order by pwdDate desc limit 5 ) AS A \n" +
"where pwd = AES_ENCRYPT(:pwd, 'key_str') \n";
Query query = session.createSQLQuery(SQL);
query.setParameter("pwd", psw);
List<UserHistory> list = query.list();