9.1 - Paràmetres en les consultes
createQuery() admet també la utilització de paràmetres, igual que feia les sentències PreparedStatement del tema anterior. La manera de posar-les és prou similar al vist en aquella ocasió. Ara, però, ho ampliarem un poc.
La manera de posar valor als paràmetres serà utilitzant el mètodes setParameter() que tindrà 2 paràmetres, el primer per a assenyalar el paràmetre, i el segon per a indicar el valor. De moment tot igual que en el PreparedStatement.
Però ara veurem 2 maneres de posar paràmetres en la consulta:
- Amb ?i, utilitzant el mètode setParameter(int, valor) i indicant el número el mateix que després de la interrogant (la i).
- Amb :nom , utilitzant el mètode setParameter(string, valor) i indicant el nom del paràmetre
Ho veurem molt més clar en un exemple, millor dit, en dues versions del mateix exemple. Intentarem traure les poblacions d'una determinada comarca, que tenen una altura determinada o major. I aquestos dos valors els posarem com a paràmetres, i així podrem practicar les dues formes. Els valors que posarem per a la comarca serà Alcalatén, i l'altura 500
En aquesta primera versió assenyalem els paràmetres amb ?i a l'estil de JDBC. Copieu el següent codi al fitxer Exemple_31_ConsultesAmbParametres1.kt
package exemples
import classes.Poblacio
import org.hibernate.cfg.Configuration
import java.util.logging.Level
import java.util.logging.LogManager
fun main(args: Array<String>) {
LogManager.getLogManager().getLogger("").setLevel(Level.SEVERE)
val sessio = Configuration().configure().buildSessionFactory().openSession()
val q = sessio.createQuery("from Poblacio where altura>=?1 and comarca.nomC=?2", Poblacio::class.java)
q.setParameter(1, 500)
q.setParameter(2, "Alcalatén")
for (p in q.list()) {
p as Poblacio
println(p.nom + " - " + p.altura)
}
sessio.close()
}
Nota
En versions anteriors a banda de setParameter() s'utilitzaven els mètodes setInteger(), setString()... però des de la versió 6 d'Hibernate ja no existeixen
En la segona posem els paràmetres de l'altra manera. Copieu el següent codi al fitxer Exemple_32_ConsultesAmbParametres2.kt
package exemples
import classes.Poblacio
import org.hibernate.cfg.Configuration
import java.util.logging.Level
import java.util.logging.LogManager
fun main(args: Array<String>) {
LogManager.getLogManager().getLogger("").setLevel(Level.SEVERE)
val sessio = Configuration().configure().buildSessionFactory().openSession()
val q = sessio.createQuery("from Poblacio where altura>=:alt and comarca.nomC=:com", Poblacio::class.java)
q.setParameter("alt",500)
q.setParameter("com","Alcalatén")
for (p in q.list()) {
p as Poblacio
println(p.nom + " - " + p.altura)
}
sessio.close()
}
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 2.5