Hola,
estoy haciendo un programilla, aplicación web, típico "login" con struts2 & hibernate.
En el programa tengo en useDAO.java estos dos metodos, donde con uno guardo registros de usuarios y con el otro compruebo cuando un usuario se loga si se ha registrado anteriormente o no. El caso es que el primero me funciona, me guarda los datos en la base de datos, pero el segundo no hay manera.
------------METODO PARA GUARDAR DATOS EN DB---------------------
public static boolean registerUser(User u) {
SessionFactory sf = HibernateUtil.getSessionFactory();
Transaction t = null;
try {
Session s = sf.openSession(); //se abre una sesion
t = s.beginTransaction(); // se inicia una unidad de trabajo
s.persist(u);
s.save(u); //guardamos
s.flush();
t.commit();
s.close();
// confirmamos la transaccion
return true;
}
catch(Exception ex) {
System.err.println("Error -->" + ex.getMessage());
if ( t!=null) t.rollback(); // tiramos para atras la transaccinn
return false;
}
}
En estos dos metodos "ACTION" llamo a los anteriores. El primero funciona, pero el segundo no y nosé en que me estoy equivocando. Cundo quiero ir al logarme, cuando llama al action de logarse (el segundo) me salta un error.
------EL ERROR ES EL SIGUIENTE:--------------------
Servlet.service() para servlet default lanzó excepción
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing.
-----------------METODO PARA COMPROBAR SI EXISTE U---------------------
public static String comprobarUser(User u){
String nombre;
Transaction t = null;
SessionFactory sf = HibernateUtil.getSessionFactory();
Session s = sf.openSession();
t = s.beginTransaction();
nombre = s.getEntityName(u);
t.commit();
return nombre;
}
-----------------------METODO DONDE SE LLAMA AL 1º DE ARRIBA----------------
public String execute() throws Exception {
User u = new User();
u.setEmail(email);
u.setPassword(pwd);
if ( UserDAO.registerUser(u))
return "success";
else
return "fail";
}
----------------METODO QUE LLAMA AL 2º-----------------------------
public String execute() throws Exception {
User u = new User();
u.setEmail(email);
u.setPassword(pwd);
if ( UserDAO.comprobarUser(u) != null){
return "success";
}
else
return "error";
}
------EL ERROR ES EL SIGUIENTE:--------------------
Servlet.service() para servlet default lanzó excepción
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing