2014-07-09 18 views
15

İlkbahar-veri JPA'da, esasen benzer şekilde arama yapan bir yöntem sorgusu oluşturmak için var mıdır?SpringData JPA Deposu Yöntemi Benzer bir sorgulama?

Aşağıdaki yöntem sorgu

public MakeModel findByModelIgnoreCase(String model); 

Ne istiyorum gerçekten bir benzeri ifadesidir var. Sadece bir Ölçüt veya bir Soru açıklaması eklemem gerekir mi? Çok mu soruyorum?

//Stupid example of what I want to be able to do 

    public MakeModel findByFuzzyModelIgnoreCase(String model); 

Gerçekten de bunun tam kalbinde bir tablo araması yapmak istiyorum. Hibernate Spring verilerinin altındaki Hibernate'i kullanıyorum, bu yüzden Hibernate Search gibi bazı arama api'lerini kullanabileceğimi tahmin ediyorum. Burada önerilere açığım.

+0

JPQL'in GİBİ var: https://blogs.oracle.com/JPQL01/entry/how_to_use_like_expression –

+1

http://docs.spring.io/spring-data/jpa/docs/1.6.1.RELEASE/reference/ html/jpa.repositories.html # jpa.query-methods.query-creation – axtavt

+0

tam olarak ihtiyacım olan axtavt ... – chrislhardin

cevap

20

gibi çok desteklenir: bir katı başlangıç ​​maçı, de aynı olması önemli olmadığını söylemek başında "%" ekleyin: Aradığınızda

MakeModel findByModelLikeIgnoreCase(String model); 

yöntem follwing kullanmak son, ya da bunlardan birini kullanabilirsiniz istediğiniz gibi bağlıdır.

MakeModel makeModel = findByModelLikeIgnoreCase("%"+model+"%"); 

sizin marka modeli test mı ve karşılaştırmak için dize sonra "%"+model+"%" ise: Eğer yoksa

te is a match , es is not . 
+4

Harika cevap! Aynı şeyi yapan, ancak söz konusu müşterinin söz konusu mağaza için sözdiziminin sözdizimini bilmesini istemeyen “İçeren”/“İçerik” anahtar kelimelerinden bahsetmek isteyebilirsiniz. –

23

:

es is a match , T is a match , test is a match 

karşılaştırmak dize model+"%" olduğunu "%" el ile eklemek istediğinizde, aşağıdaki sorgulama yöntemlerini kullanabilirsiniz:

MakeModel findByModelStartingWithIgnoreCase(String model); //SQL => LIKE 'model%' 
MakeModel findByModelEndingWithIgnoreCase(String model); //SQL => LIKE '%model' 
MakeModel findByModelContainingIgnoreCase(String model); //SQL => LIKE '%model%' 
+0

1 küçük ayrıntı, IgnoreCase => ILIKE – dwana