Abfrage ohne Berücksichtigung der Groß- und Kleinschreibung mit Spring CrudRepository

102

Mit Spring CrudRepository Query; Ich möchte "DeviceType" -Entitäten mit der Eigenschaft "name" auswählen. Bei der folgenden Abfrage wählen Sie die Berechtigungen nach Groß- und Kleinschreibung aus. Wie ich es fallunabhängig mache. Vielen Dank.

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

    public Iterable<DeviceType> findByNameContaining(String name);

}  
Channa
quelle
16
Hast du es versucht public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);?
Peter Keller
Wenn Sie an Query interessiert sind, versuchen Sie dies bitte. Nach LIKE <code> @Query (value = "Wählen Sie dt aus DeviceType als dt aus, wobei lower (dt.name) wie lower (: name)". ) public Iterable <DeviceType> anyMethodNameGoesHere (@Param (name) String name); </ code>
Java_Fire_Within

Antworten:

197

Genau wie @Peter im Kommentar erwähnt, fügen Sie einfach hinzu IgnoreCase:

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

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

In der Dokumentation finden Sie eine Liste aller unterstützten Schlüsselwörter in Methodennamen.

Roadrunner
quelle
Vielen Dank für die Antwort; Ich werde diese Dokumentation sicher weiterleiten. Mai Danke. Eine gute Zeit haben !
Channa
3
Es hat bei mir funktioniert. Ich habe eine JPA-Abfrage verwendet. Also gemäß der Dokumentation, wo UPPER (x.firstame) = UPPER (? 1) funktionierte.
Sunitha
@sunitha wissen Sie, wie wir dieses Verhalten ändern können, sagen wir, dass es NIEDRIGER ist? Meine Datenbank hat Indexierung basierend auf Kleinbuchstaben
Sudip Bhandari
@ SudipBhandari: Sicher kannst du.
Sunitha
1
Für mehrere Eigenschaften IgnoreCasewie folgt wiederholen :List<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
Tarator
11

Die folgende Spring Data Mongo-Abfrage funktioniert für mich. Ich würde es vorziehen, Listanstatt zu verwendenIterator

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

quelle
1

In meinem Fall hat das Hinzufügen IgnoreCaseüberhaupt nicht funktioniert.

Ich habe festgestellt, dass es auch möglich ist, Optionen für den regulären Ausdruck bereitzustellen:

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

Die iOption macht die Abfrage unabhängig von Groß- und Kleinschreibung.

rocksteady
quelle
1

Für diejenigen, die eine benutzerdefinierte JPA-Abfrage verwenden. Das obere Schlüsselwort und toUpperCase helfen. Der folgende Code funktioniert für mich

 return  entityManager.createQuery("select q from "table " q  where upper(q.applicant)=:applicant")
    .setParameter("applicant",applicant.toUpperCase().trim()).getSingleResult();
Dapper Dan
quelle
1
Seien Sie vorsichtig, wenn Sie 'Upper (q.applicant)' verwenden. In Postgres verursacht es '.PSQLException: ERROR: Funktion Upper (Bytea) existiert nicht', wenn q.applicant null ist
advortsov