pondělí 9. dubna 2012

SQL vyhledávání LIKE pro čísla

Pro svou aplikaci jsem potřeboval, aby fungovala filtrace podle ID entity. Mám v aplikaci faktury, které jsou rozlišené podle ID typu long (což je číslo). Když uživatel chce najít např. fakturu, která obsahuje "1" - tj. faktura č. 1, ale i č. 10 nebo 11, tak pomocí těch předdefinovaných Criteria v Hibernate to nejde. Teda ono jde, ale pomocí kritéria sqlRestriction. Tzn. uživatel si musí pomocí SQL nadefinovat kritérium sám :)

V případě, že mám číslo, ale chci ho vyhledat pomocí LIKE jako String, tak musím prvně změnit jeho typ. Vypadá to nějak takhle:
sqlRestriction "cast( id AS char ) like '%" + id.toString() + "%'"
kde id je ID typu long převedené na String.

Ještě jsem pak četl, že je potřeba dát pozor na SQL Injection, ale nezkoumal jsem to více, protože v mém případě se jedná o interní systém pro pár lidí. Každopádně tento problém by měl být odstraněn ve verzi 2.1 pomocí parametrů.

Zdroj:
http://grails.1312388.n4.nabble.com/LIKE-or-ILIKE-on-Integer-td2997745.html

Žádné komentáře:

Okomentovat