2015-05-19 27 views
6

Używam kryteriów API do sprawdzenia, czy nazwa użytkownika istnieje. Potem sprawdzam hasło. Ale w nazwie użytkownika nie jest rozróżniana wielkość liter. Chcę, aby wielkość liter była rozróżniana.Kryteria w stanie hibernacji są bez znaczenia?

Criteria criteria2 = session.createCriteria(UserMaster.class); 
criteria2.add(Restrictions.eq("userName", userName)); 
userDetails = (UserMaster)criteria2.uniqueResult(); 
if(userDetails != null) { 
     //logic goes here 
} 

Każda pomoc zostanie doceniona.

+3

To może zależeć od używanej bazy danych lub ustawień bazy danych. Na przykład, o ile mi wiadomo, MS SQL Server domyślnie nie uwzględnia porównań wielkości liter, a Oracle rozróżnia wielkość liter. – Jesper

+0

@Jesper Myślę, że powinieneś to zrobić. –

+0

Następujące zmiany zostały wykonane w bazie danych, ale nadal nie działa. ALTER TABLE USER_MASTER CHANGE PASSWORD PASSWORD VARCHAR (255) BINARY; –

Odpowiedz

0

zrobiłem z natywnego SQL następująco

Query query = session.createSQLQuery("select * from USER_MASTER where binary USER_NAME='"+userName+"'").addEntity(UserMaster.class); 
userDetails = (UserMaster)query.uniqueResult(); 
if(userDetails != null) { 
    //code goes here 
} 
+0

Uważaj na bezpośrednie umieszczanie nazwy użytkownika w instrukcji SQL, może to spowodować, że twój program będzie podatny na [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection). Pewnego dnia [Bobby Tables] (https://xkcd.com/327/) utworzy konto w twoim systemie ... – Jesper

3

W jaki sposób porównywane są łańcuchy znaków, zależy od marki i wersji bazy danych oraz ustawień bazy danych. Niektóre bazy danych, na przykład Microsoft SQL Server, domyślnie porównują łańcuchy w sposób niewrażliwy na wielkość liter, podczas gdy inne porównują łańcuchy w sposób uwzględniający wielkość liter.

Sprawdź ustawienia swojej bazy danych; przejrzyj dokumentację swojej marki i wersję bazy danych, aby dowiedzieć się, jak zmienić to ustawienie.

Jeśli to rzeczywiście MS SQL Server, a następnie spójrz na przykład na to pytanie: Sql Server check case sensitivity?

0

mogę powiedzieć proste rozwiązanie. Ale nie jest to prosta droga. Zaszyfruj swoją nazwę użytkownika za pomocą MD5 i zapisz ją w bazie danych. Porównując nazwę użytkownika, należy zaszyfrować daną nazwę użytkownika za pomocą MD5 i porównać ją z nazwą użytkownika zapisaną w bazie danych. Ale nie polecam tego rozwiązania, w każdym razie możesz z niego skorzystać. :)

Powiązane problemy