I have 2 Objects Site and Page. A Site have many Pages. I get pages with fetch Lazy type. With a particular reason i want to get pages of a site where the date of pages > val.
@Entity
@Table(name = "site")
Public class Site {
String site_id;
Set<Page> pages;
@OneToMany(mappedBy = "site", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
public Set<Page> getPages() {
return pages;
}
}
@Entity
@Table(name = "page")
Public class Page{
String page_id;
Site site;
@ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumn(name = "site_id")
public Site getSite() {
return site;
}
}
Now in SiteDao i have the mothode to call a site and its pages
@Stateless
public class SiteDao {
@PersistenceContext(unitName = "name")
private EntityManager em;
public Site getSiteAndPages(String site_id) {
Query q = em.createQuery("select s From Site s where s.site_id = :site_id");
q.setParameter("site_id", site_id);
Site s = (Site) q.getSingleResult();
s.getPages();
return s;
}
}
This turns well, but s.getPages()
return all the pages and i want to get only some pages using where conditions.
I tried many options like:
Query q = em.createQuery(
"select s, p From Site s"
+ " join s.pages p "
+ " where s.site_id = :site_id "
+ " and p.site = s"
+ " and p.lastupdate > :val"
);
q.setParameter("site_id", site_id);
q.setParameter("val", lastUpdate);
Im bloked after many searches, does any person have an idea about how can i fix this ?
B.R