我想在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
给出额外的参数答案 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();