Vamos a realizar un insert des de una clase DAO.
En primer lugar es una buena idea crear un pequeño método que nos devuelva el objeto en caso de tenerlo previamente en la base de datos. De esta manera podemos decidir si en vez de hacer un insert le hacemos un update.
Vamos a ver como hacer este método con un ejemplo :
public Umbrales getUmbrales(int idUser){
Umbrales umbrales = null;
try{
iniciaOperacion();
Criteria criteria = sesion.createCriteria(Umbrales.class);
criteria.add(Restrictions.eq("idUsuari", idUser));
umbrales = (Umbrales)criteria.uniqueResult();
} catch(HibernateException he){
manejaExcepcion(he);
throw he;
}finally{
sesion.close();}
return umbrales;
}
Vamos a comentarlo de un modo rápido. Añadimos un criteria con el id de usuario que contiene este objeto llamado Umbrales (es un ejemplo, extrapolar a lo que cada uno necesite, no importa que es exactamente Umbrales). Una vez hecho esto se devuelve un único objeto de la BD con criteria.uniqueResult(); (entendamos que un usuario solo puede tener un objeto Umbrales en nuestra BD y por tanto idUsuario funciona como identificador único). El modificador del método puede ser public o private según nuestras necesidades de llamar a este método fuera de la clase.
Una vez hecho esto, implementamos el método guardar de la siguiente manera:
public boolean guardarUmbrales(int idUsuari,float dispOptima,float dispWaring,float dispCritical){
boolean rc=false;
Umbrales umbralNuevo =
new Umbrales(idUsuari,dispOptima,dispWaring,dispCritical);
Umbrales umbralGuardado = getUmbrales(idUsuari);
if(umbralGuardado == null){
rc = insertUmbral(umbralNuevo);
}else{
rc = updateUmbrales(umbralNuevo);
}
return rc;
}
Este método es público ya que puede ser llamado des de cualquier lado. Vamos a comentar este método : por parámetros recibiremos un seguido de variables que utilizaremos para montarnos el objeto nuevo Umbrales, esto no es del todo necesario ya que podríamos recibir por parámetro directamente el objeto ya instanciado. A continuación realizamos una llamada al método getUmbrales() que hemos creado anteriormente, este nos devolverá un objeto en casa de existir previamente o un null en caso de que no existe ningún objeto en la BD con ese id de usuario, en base a esto decidimos, si es null crearemos una nueva entrada y si ya existe realizaremos un update. Los métodos que haran estas tareas son implementados con modificadores de acceso private ya que no deben ser llamados nunca des de fuera de esta clase, y si debe ser llamado guardarUmbrales() (que contiene la lógica de decisión de que hacer), los métodos son los siguientes:
private boolean insertUmbral(Umbrales umbral){
boolean rc=false;
try{
iniciaOperacion();
sesion.save(umbral);
tx.commit();
rc=true;
}catch(HibernateException he){
manejaExcepcion(he);
throw he;
}finally{
sesion.close();
}
return rc;
}
private boolean updateUmbrales(Umbrales umbral){
boolean rc=false;
try{
iniciaOperacion();
sesion.update(umbral);
tx.commit();
rc=true;
}catch(HibernateException he){
manejaExcepcion(he);
throw he;
}finally{
sesion.close();
}
return rc;
}
Cada uno de los métodos retornan una variable rc para verificar que las operaciones han ido correctamente o no, a modo que podamos tener un control de los resultados.