Hibernate 3 hql查询加入2表

时间:2013-07-31 11:44:00

标签: hibernate hql

我想执行以下sql查询

SELECT * FROM users u JOIN `friendship` f ON u.id = f.f_uid WHERE f.u_uid = 118 AND u.lastDataFetched >= DATE_SUB(CURDATE(),INTERVAL 7 DAY)) order by f.mutual_friendship_count

如何使用hibernate 3.0

为此编写hql查询

我写得像这样

String[] parameterName={"usersByUUid","inthepastday"};
Object[] paramValues = {user,"7"};
List<Friendship> friendshipFriend  = getHibernateTemplate().findByNamedParam(" from Users u JOIN Friendship f on  u.id = f.f_uid where f.u_uid = :usersByUUid and date_sub(now(),interval :inthepastday day) >=u.lastDataFetched  order by f.mutual_friendship_count ", parameterName,paramValues);

但它显示了hql语法错误

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用java.util.CalendarJodaTime使用java代码并创建所需日期(今天日期 - 7天)。然后将其传递给hql:

    and :date7DaysAgo >= u.lastDataFetched

  2. 另一种方法是使用Native查询,这样就可以编写纯SQL。只需添加注释@NamedNativeQuery即可。 然后通过getHibernateTemplate().findByNamedQuery("nameOfYourNamedQuery");

  3. 进行调用