Spring CrudRepository ile Büyük / Küçük Harfe Duyarlı Olmayan Sorgu


102

Spring CrudRepository Sorgulama ile; "Name" özelliğine sahip "DeviceType" varlıklarını seçmek istiyorum. Ancak aşağıdaki sorgu, büyük / küçük harfe duyarlı şekilde yetkileri seçin. Nasıl büyük / küçük harf duyarlı hale getiriyorum. Teşekkürler.

public interface DeviceTypeRepository extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContaining(String name);

}  

16
Denedin public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);mi
Peter Keller

Sorgu ile ilgileniyorsanız, lütfen şunu deneyin, LIKE <code> @Query'den sonra '%' vermeye gerek yok (value = "DeviceType'tan dt'yi dt olarak seçin, burada daha düşük (dt.name), daha düşük (: ad) gibi" ) public Iterable <DeviceType> anyMethodNameGoesHere (@Param (name) String name); </code>
Java_Fire_Within

Yanıtlar:


197

Yorumda @Peter'ın tam olarak bahsettiği gibi, şunları eklemeniz yeterlidir IgnoreCase:

public interface DeviceTypeRepository 
    extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContainingIgnoreCase(String name);
}  

Yöntem adları içinde desteklenen tüm anahtar kelimelerin listesi için belgelere bakın .


Cevap için çok teşekkürler; Elbette bu belgelere başvuracağım. Teşekkürler. İyi eğlenceler!
Channa

3
Benim için çalıştı. JPA sorgusu kullanıyordum. Yani belgelere göre, UPPER (x.firstame) = UPPER (? 1) çalıştı.
sunitha

@sunitha, bu davranışı değiştirmenin bir yolunu biliyor musunuz, DÜŞÜK yap diyelim?
DB'mde

@SudipBhandari: Elbette yapabilirsin.
sunitha

1
Birden fazla mülk için IgnoreCaseşu şekilde yeniden okuyun:List<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
Tarator

11

Aşağıdaki Spring data mongo sorgusu benim için çalışıyor. Ben kullanmayı tercih ediyorum ListyerineIterator

public interface DeviceTypeRepository extends CrudRepository<DeviceType,Integer>, JpaSpecificationExecutor<DeviceType> {
    List<DeviceType> findByNameIgnoreCase(String name);
} 

1

Benim durumumda eklemek IgnoreCasehiç işe yaramadı.

Normal ifade için de seçenekler sunmanın mümkün olduğunu buldum:

@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);

iSeçenek sorgu küçük harf duyarsız hale getirir.


1

Özel JPA sorgusu kullananlar için Upper keyword ve toUpperCase yardımcı olur. Aşağıdaki kod benim için çalışıyor

 return  entityManager.createQuery("select q from "table " q  where upper(q.applicant)=:applicant")
    .setParameter("applicant",applicant.toUpperCase().trim()).getSingleResult();

1
'Üst (q.uygulayıcı)' kullanırken dikkatli olun. Postgres'te, q.applicant boş olduğunda '.PSQLException: ERROR: fonksiyon üst (bayt) mevcut değil' 'e neden oluyor
advortsov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.