如何使用HQL连接提供额外参数

时间:2014-12-11 09:48:18

标签: mysql select join hql

我想在hql中为连接条件提供额外的参数。 在sql查询中我写

select a.*,ur.fname,ur.lname
from 
atom as a
left join user as ur
on 
a.id=ur.id
left join album as al
on 
a.id=al.aid
and al.name='Profile'
left join post_images as pi
on 
a.id=pi.aid
and pi.is_album_cover='yes'
where
(ur.fname like '%n%'
or ur.fname like '%n%')
and a.status='active';

哪个工作有效并给出了预期的结果。 在hql中我不知道如何使用join来提供额外的参数 用于获取我写的数据(没有额外的参数)

feeds = (List<Atom>) session.createQuery(
             "select distinct atom from Atom as atom "
             + "left join fetch atom.albums  as album "
             + "left join fetch album.postImageses as coverImage "
             + "left join fetch atom.user as user "
             + "where "
             +  "(atom.user.fname like :name "
             + "or atom.user.lname like :name )"
              + "and album.name=:albumName "
             + "and coverImage.isAlbumCover=:isCover "
             + "and atom.status=:status ")
             .setParameter("albumName", "Profile")
             .setParameter("name", '%' + name + '%')
            .setParameter("name", '%' + name + '%')
             .setParameter("isCover", "yes")
             .setParameter("status", "active")
             .setFirstResult(0)
             .setMaxResults(30)
             .list();

哪个没有给出任何结果我怎么能用join

给出额外的参数

1 个答案:

答案 0 :(得分:0)

在HQL中,您可以使用带有关键字的HQL提供额外的连接条件。

Chech Associations and joins in HQL

试试这个:

您的 HQL ::

select distinct atom 
from Atom as atom 
left join atom.albums as album with album.name= "Profile" 
left join atom.postImageses as coverImage with coverImage.isAlbumCover="yes"
left join atom.user as user 
where (user.fname like name or user.lname like name) and atom.status="active";

您的 CODE ::

feeds = (List<Atom>) session.createQuery(
               "select distinct atom from Atom as atom "
             + "left join atom.albums as album with album.name=:albumName "
             + "left join atom.postImageses as coverImage with coverImage.isAlbumCover=:isCover "
             + "left join atom.user as user "
             + "where (user.fname like :name or user.lname like :name) "
             + "and atom.status=:status ")
             .setParameter("albumName", "Profile")
             .setParameter("name", '%' + name + '%')
             .setParameter("isCover", "yes")
             .setParameter("status", "active")
             .setFirstResult(0)
             .setMaxResults(30)
             .list();