잘 작동하는 조건 쿼리가 있습니다.최대 절전 모드 쿼리 ... 새 조건 추가
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, 단지 분리는 런타임에 필터를 추가 할 수있는 기능을 제공한다. 나는 이것을 좋아하지 만, 나는 여기서 다른 선택을 사용하고 싶지 않고 다른 선택을 찾고있다.
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);
난 그냥 조건 경우 다음과 같이 사용하지만, 작동하지 않는 노력했다 (심지어이 컴파일하려면, 나는 위의 모든 라인에있는 모든 라인과 세미콜론의 기준을 데 쿼리 형식을 수정했다).
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));
}
분리형을 사용하는 것보다 더 나은 옵션으로이 작업을 수행하는 방법에 대한 아이디어가 있습니까?
yes..it가 작동하지 않는보기 ... 기본적으로 "statrtDate는"이 아니라 "getPersistentClass()"테이블에 급여 테이블에 있습니다. 게시물에 표시된 코드에서 hibernate는 "getPersistentClass()"테이블에서 startDate 열을 찾으려고 시도합니다. 따라서 작동하지 않습니다 – user1717230
질문에 startDate가 다른 테이블에 있다고 언급하지 않았습니다. 어쨌든 나는 내 대답을 편집했다. 급여의 별명을 지정해야합니다. –