최대 절전 모드의 기준 API는 여전히 중첩 관계를 지원하지 않습니까?

StackOverflow https://stackoverflow.com/questions/1279500

문제

모든 사람이 말하는 것은 아마도 복잡한 검색 기준을 적용하여 가장 가능성이 높은 유스 케이스 일 것입니다. 문제는 쿼리하려는 테이블이 전적으로 원시 값으로 구성되지 않고 부분적으로 다른 객체에서 구성되며 해당 객체의 ID에 대해 쿼리해야합니다.

나는 찾았다 이 기사 2 년 전부터 불가능하다는 것을 암시합니다. 여기에 내가 소용하지 않도록 시도한 방법은 다음과 같습니다. 최대 절전 모드의 다른 측면이 있는데,이 종류의 도트 표기법이 문자열로 구성된 곳에서 객체 중첩을 나타내는 위치를 알고있는 다른 측면이 있습니다.

   if (!lookupBean.getCompanyInput().equals("")) {
       criteria.add(Restrictions.like("company.company", lookupBean.getCompanyInput() + "%"));
   }

편집하다:

다음은 아래의 첫 번째 답변의 제안을 사용하여 위에서 시도했던 것을 달성하기위한 올바르게 고려 된 코드입니다. 다른 관련 객체/테이블의 속성을 주문하기 위해 추가 CreateCriteria 호출을 사용하고 있습니다.

if (!lookupBean.getCompanyValue().equals("")) {
    criteria.createCriteria("company").add(
           Restrictions.like("company", lookupBean.getCompanyValue() + "%"));
}

List<TrailerDetail> tdList = 
        criteria.createCriteria("location").addOrder(Order.asc("location")).list();
도움이 되었습니까?

해결책

내가 당신의 예제를 따르지는 않지만, 단순히 둥지를 통해 관련 엔티티에 필터 조건을 지정할 수 있습니다. 기준 나무를 형성하기위한 물체. 예를 들어, 엔티티가 호출되는 경우 주문하다 a 사용자 엔티티, 나는 다음과 같은 쿼리를 가진 Fred라는 사용자의 모든 주문을 찾을 수 있습니다.

List<Order> orders = session.createCriteria(Order.class)
    .createCriteria("user")
        .add(eq("name", "fred"))
    .list();

당신이 그 자체와 관계가있는 단체에 대해 이야기하고 있다면, 그것은 또한 효과가 있어야합니다. 관련 오브젝트의 ID를 필터링 해야하는 경우 "이름"을 "ID"로 바꿀 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top