2017-11-07 12 views
0

동일한 열 이름에 대해 아래 @Where 절에 하나 이상의 LIKE 연산자를 추가하려고합니다. 하지만, OR/AND 연산자로 LIKE를 추가하면 정확한 결과를 얻지 못할 수도 있습니다. 정확한 값을 얻기 위해 어떻게이 시나리오를 단순화 할 수 있습니까?Hibernate - SQL annotation 같은 열 이름에 여러 LIKE 연산자가있는 @Where 절

아래 코드를 찾으십시오. 그것은 것

@Where(clause="name NOT LIKE '%long%' AND name LIKE '%description' AND name 
LIKE '%source%'") 

@OneToMany(mappedBy = "product", cascade = CascadeType.ALL) 
@Where(clause="name NOT LIKE '%long%' AND name LIKE '%description'") 
private List<ProductAttr> productAttr; 
public List<ProductAttr> getProductAttr() { 
    return productAttr; 
} 

public void setProductAttr(List<ProductAttr> productAttr) { 
    this.productAttr = productAttr; 
} 

내가 사용하는 경우와 운영자는 일부 레코드에 대한 널 포인터 예외를 제공합니다.

내가 OR 연산자

@Where(clause="name NOT LIKE '%long%' AND name LIKE '%description' OR 
    name LIKE '%source%'") 

는 여기에 몇 가지 값을 놓치고 사용하는 경우.

이 시나리오를 해결하기위한 최선의 방법은 무엇입니까? 쿼리 위

답변

0
@Where(clause="name NOT LIKE '%long%' AND name LIKE '%description' AND name LIKE '%source%'") 

name 열 쿼리 위 must not contain long word and must contain description word and must contain source word

@Where(clause="name NOT LIKE '%long%' AND name LIKE '%description' OR name LIKE '%source%'") 

각 레코드 namemust not contain long word but must contain either description or source word

각 레코드 따라서 결과 집합은 두 쿼리 다르고 수단.

+0

두 가지 경우를 함께 결합하는 다른 방법일까요? 쿼리 결과는 사용할 수없는 항목이 있으면 결과를 놓치지 않아야합니다. – Karthikeyan