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 
  
 

