2017-11-07 10 views
0

同じ列名に対して、以下の@Where節に1つ以上のLIKE演算子を追加したいとします。しかし、OR/AND演算子でLIKEを追加すると、正確な結果が得られません。 正確な値を得るためにこのシナリオをどのように単純化できますか?Hibernate - SQLアノテーション同じ列名に複数の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; 
} 

私が使用している場合は、オペレータが、いくつかのレコードのnullポインタ例外を提供します。私が使用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%'") 

の各レコードはnameカラムmust not contain long word but must contain either description or source word

の各レコードを意味し、したがってResultSetがクエリの両方のために異なることを意味します。

+0

それ以外の方法で両方のケースを組み合わせることはできますか。意味がないものがあれば、結果は見逃せません。 – Karthikeyan

関連する問題