1

ここにコードの2つのクラスがあります

    public class LoginServiceImplementation implements LoginService {
    public boolean validateLogin(Login login)
    {
        LoginDao loginDao=DaoFactory.getLoginDao();
            boolean b=loginDao.validateLogin(login);
       System.out.println("id=="+login.getLoginId()+" uname=="+login.getuName()+" pass== "+login.getPassword());//  values reset to null
return b;
    }
}




    public class LoginDaoImplementation implements LoginDao {

    @Override
    public Login validateLogin(Login login) {   
        Session session= Hibernate.getHibernateSession();
        Query query= session.createQuery("from Login where uName= 'user' and password= 123");
        //query.setParameter("uname", login.getuName());
        //query.setParameter("pwd", login.getPassword());
        //System.out.print(login.getuName());
        //System.out.print(login.getPassword());
        try
        {
            List<Login> logins=query.list();
            System.out.print(logins.size());

            if(logins.size()>0)
            {
                Login l=new Login();
                l=logins.get(0);
                login=l;                
                System.out.println("id=="+login.getLoginId()+" uname=="+login.getuName()+" pass== "+login.getPassword());/// ALL values getting printed
                return login;
            }
            session.close();
            return null;
        }
        catch(HibernateException x)
        {
            x.printStackTrace();
            session.close();
            return null;
        }

    }


}

serviceImplementation クラスから DaoImplementation クラスの validatemethod を呼び出すと、DaoImplementation クラスはパラメーターとして渡されるログイン オブジェクトに値を設定しますが、serviceimplementation クラスでは、すべての値が null に設定された同じ古いオブジェクトを取得しています。理由と解決策を添えて返信してください。ありがとうございました

4

1 に答える 1

2
 login=l;   

それはうまくいきません。新しいオブジェクトをローカル変数に割り当てているだけですlogin。これは、以前にその変数に格納されていた (そして外部から見える) オブジェクトには影響しません。Java は参照渡しをサポートしていないため、スコープ外で変数を再割り当てすることはできません。

すべてのデータをそのオブジェクトに (セッターを使用して) コピーするか、(私の好みで) 呼び出し元が使用できるメソッドから Login オブジェクトを返す必要があります。(すでにそれを行っているかどうかは明確ではありません。サンプルのboolean一部は を返しているようで、一部はオブジェクトを返しているようですLogin)。

于 2012-10-17T07:55:12.143 に答える