我想建立一個查詢,查詢不同實體的日期。我的結構是:如果JPA Criteria Builder中的/ Case語句爲
- 合同日期(非可空)
- 員工都有日期(非可空)
- 僱員可能有一個合同號(可爲空)
如果一個員工都有合同我想檢索合同日期。如果員工沒有合同,那麼我想要返回員工日期。
到目前爲止我的代碼是:
if (inputDate!= null) {
ParameterExpression<Date> exp = criteriaBuilder.parameter(Date.class, "inputDate");
criteria.add(criteriaBuilder.or(
criteriaBuilder.isNull(employee.get("contract")),
criteriaBuilder.lessThanOrEqualTo(employee.<Date>get("creationDate"), exp), criteriaBuilder.lessThanOrEqualTo((employee.join("contract").<Date>get("fromDate")), exp)));}
這似乎並沒有工作,雖然。我總是看起來進入了我並不期待的isNull。
我很高興看到這一些更多,但我想我的問題是這是否是正確的方式去實現它。是嗎?我在criteriaBuilder中看到了一個selectCase,所以也許這可能是一個更好的解決方案。
任何指針都會被大量接收。
感謝
嗨JMelnik,感謝您的回覆。我在這段代碼中遇到的問題是selectCase返回一個表達式而不是謂詞。它實際上是返回謂詞,所以試圖將整個事件作爲謂詞來處理。不幸的是,它仍然不能編譯,因爲我正在投射,所以我覺得很奇怪。你知道這可能是什麼嗎?謝謝 – RNJ 2012-04-23 09:49:59
@ user846476我認爲我們需要做的是比較日期和Case語句中的日期。 – JMelnik 2012-06-14 06:38:48