1
我有一個標準查詢,工作得很好。休眠標準查詢...添加新條件
Criteria criteria = getSession().createCriteria(getPersistentClass());
criteria.add(Restrictions.eq("employerId",employerId))
.setFetchMode("card", FetchMode.JOIN)
.createCriteria("card")
.addOrder(Order.desc("cardId"))
.createCriteria("salary")
.add(Restrictions.eq("salaryType",SalaryIdentifierType.CONTRACTOR))
.add(Restrictions.eq("active","YES"));
現在,我需要添加另一個過濾器(條件)到這個標準。新的過濾器是joinDate
。如果joinDate
值已從前端傳遞過來,那麼我將不得不將其添加到此查詢中,否則不應添加過濾器joinDate
。 (我知道,它的奇怪...但AFAIK,只有disjunction給出了在運行時添加過濾器的設施,只有它存在時纔會這樣做)。我是這樣做的,但我不想在這裏使用分離,我正在尋找其他選項。
Criteria criteria = getSession().createCriteria(getPersistentClass());
-------------------------------------------------------------------------
Disjunction disjunctionDate = Restrictions.disjunction();
if(utilDate!=null){
disjunctionDate = (Disjunction) disjunctionDate.add(Restrictions.ge("startDate", utilDate));
}
-----------------------------------------------------------------------
criteria.add(Restrictions.eq("employerId",employerId))
.setFetchMode("card", FetchMode.JOIN)
.createCriteria("card")
.addOrder(Order.desc("cardId"))
.createCriteria("salary")
.add(Restrictions.eq("salaryType",SalaryIdentifierType.CONTRACTOR))
.add(Restrictions.eq("active","YES"))
.add(disjunctionDate);
我剛纔用if條件,這樣可是不行的嘗試(甚至使這種編譯,我不得不修改查詢格式從上面有每行每行和分號標準)。
Criteria criteria = getSession().createCriteria(getPersistentClass());
criteria.add(Restrictions.eq("employerId",employerId));
criteria.setFetchMode("card", FetchMode.JOIN);
criteria.createCriteria("card");
criteria.addOrder(Order.desc("cardId"));
criteria.createCriteria("salary");
criteria.add(Restrictions.eq("salaryType",SalaryIdentifierType.CONTRACTOR));
criteria.add(Restrictions.eq("active","YES"));
if(startDate!=null){
criteria.add(Restrictions.ge("startDate",startDate));
}
任何想法如何使這個工作比使用disjunction更好的選擇?
yes..it是不工作...基本上是 「statrtDate」 是在工資表中,但不會對 「getPersistentClass()」 表中。在你的文章中顯示的代碼中,hibernate將嘗試在「getPersistentClass()」表中找到startDate列。因此它不會工作 – user1717230
在你的問題中,你沒有提到startDate在另一個表中。無論如何,我編輯我的答案。您需要爲工資指定別名。 –