Recherche sensible à la casse dans les critères Hibernate

J'utilise Hibernate 3 avec SQL Server 2008. Je veux faire une search sensible à la casse dans les critères Hibernate. Je ne suis pas capable de l'atteindre. Mon code est comme ci-dessous:

Criteria criteria = session.createCriteria(User.class); /*line 1*/ criteria.add(Ressortingctions.eq("userName", userName)); /*line 2*/ 

J'ai une class User.java qui contient un Ssortingng userName .

Entrées DB:

 id | user_name -------------- 1 | abc 2 | xyz 

Maintenant, si je passe "abc" tant que userName dans la ligne 2, alors il devrait returnner le premier logging de la DB. Mais si je transmets "Abc" , "ABC" , "aBC" etc. comme userName dans la ligne 2, aucun logging ne devrait être récupéré.

J'ai visité ce lien mais cela ne m'aide pas car je ne veux pas utiliser le collation avec hql ou avec SQL Server. Je suis ouvert à utiliser la collation avec des Criteria mais je ne sais pas comment le faire.

 Criteria criteria = s.createCriteria(User.class); criteria.add( Expression.sql("userName = ? collate Latin1_General_CS_AS_KS_WS", userName, new SsortingngType()) ); 

Vous ne pouvez pas avec hibernate. Le problème est dans MS SQL – par défaut, il utilise un classment insensible à la casse. Il peut y avoir deux solutions de contournement:

1 Sélectionnez avec hibernation et effectuez un filtrage de résultat

2 Lors de la création d'une table, utilisez la fonction de classment sensible à la casse pour vous permettre de searchr: COLLATE SQL_Latin1_General_CP850_BIN2 ou une autre spécification pour votre server (lire à partir de SYSTEMPROPERTY).

Vous pouvez essayer ceci (en utilisant ilike dans Ressortingctions API)

 Criteria criteria = s.createCriteria(User.class); criteria.add(Ressortingctions.ilike("userName", userName)); 

Cordialement

Cela peut ne pas vous convenir, mais il est préférable d'utiliser lucene / solr pour ce type de requête. En plus des requêtes insensibles à la casse, il traitera également d'autres scénarios courants pour vous.

J'ajoute le même problème, et j'ai changé le type de collation dans la table de database directement dans le server mariadb.

Je crée le champ de la table avec "COLLATE latin1_general_cs"

Ainsi, chaque search sur ce champ sera sensible à la casse.

Mon champ de table ressemble à ceci.

'case_sensitive_key' varchar (255) JEU DE CARACTÈRES latin1 COLLATE latin1_general_cs NOT NULL DEFAULT '',

J'espère que cela aidera certains d'entre vous.