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 molt similar al vist en aquella ocasió. Ara, però, ho ampliarem un poc.
La manera de posar valor als paràmetres serà utilitzant els mètodes setTipus() que tindran 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 ?, utilitzant el mètode setTipus(int, valor) i indicant el número d'ordre d'aparició del paràmetre, que comença en aquesta ocasió per 0.
- Amb :nom , utilitzant el mètode setTipus(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 coma 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 ? a l'estil de JDBC.
import org.hibernate.Query;
import org.hibernate.Session;
import classes.Poblacio;
import classes.SessionFactoryUtil;
public class ConsultesAmbParametres1 {
public static void main(String[] args) {
Session sessio = SessionFactoryUtil.getSessionFactory().openSession();
Query q = sessio.createQuery("from Poblacio where altura>=? and comarca.nomC=?");
q.setInteger(0, 500);
q.setString(1, "Alcalatén");
for (Poblacio p : (List<Poblacio>) q.list()){
System.out.println(p.getNom() + " --> " + p.getAltura());
}
}
}
En la segona posem els paràmetres de l'altra manera.
import org.hibernate.Query;
import org.hibernate.Session;
import classes.Poblacio;
import classes.SessionFactoryUtil;
public class ConsultesAmbParametres2 {
public static void main(String[] args) {
Session sessio = SessionFactoryUtil.getSessionFactory().openSession();
Query q = sessio.createQuery("from Poblacio where altura>=:alt and comarca.nomC=:com");
q.setInteger("alt", 500);
q.setString("com", "Alcalatén");
for (Poblacio p : (List<Poblacio>) q.list()){
System.out.println(p.getNom() + " --> " + p.getAltura());
}
}
}
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 2.5