2017-08-09 5 views
0

J'ai la requête de mise en veille prolongée suivantComment rendre sensible un cas de requête d'hibernation?

@NamedQuery(name = "findByName", query = "SELECT e FROM t=Table e WHERE e.name =:name") 

Et voici comment je régler le paramètre

uniqueResult(namedQuery("findByName").setString("name",name)); 

Est-ce que cette différence un « nom » de « NOM »? J'ai lu que setParameter() est sensible à la casse, dois-je changer setString() à setParameter()?

+0

Pour mon souvenir par défaut les requêtes sont sensibles à la casse. Avez-vous essayé d'exécuter cela en premier? – aorticDefiance

+0

ouais setString ne reconnaît pas la différence, –

+0

Faites-vous référence à ': name', c'est-à-dire le nom du paramètre? pas la valeur réelle du paramètre? – aorticDefiance

Répondre

0

Ceci dépend fortement de votre base de données et des classements utilisés. Certaines bases de données ont des classements CI insensibles à la casse et CS sensibles à la casse. Par exemple sur MySQL latin1_general_ci et latin1_general_cs.

Hibernate n'est pas conscient de ce fait et exécute simplement une clause standard WHERE donnant le comportement auquel la base de données est configurée.

https://dev.mysql.com/doc/refman/5.7/en/charset-mysql.html

https://msdn.microsoft.com/de-de/library/ms144250(v=sql.105).aspx

+0

est tombé sur cette option, dans d'autres messages SO .. mais je ne sais toujours pas comment cela fonctionne dans une requête nommée JPA –