【问题标题】:java method returning null valuejava方法返回空值
【发布时间】:2015-08-10 11:12:57
【问题描述】:

在使用 Spring MVC 做项目时。基本是:当学生注册时,他的数据将存储在数据库表中,并将密码发送到学生的邮件地址。

所以我有:

@RequestMapping(value = "/save", method = RequestMethod.POST)
public String dosignup(@Valid @ModelAttribute("student") Student student, HttpServletRequest request,
  HttpServletResponse response, BindingResult result) {

    studentService.addNewStudent(student.getName(),
        student.getUsername(), student.getEmail(), student.getPassword());
    studentService.sendEmail(student);
}

StudentDao接口是:

public interface StudentDao {
    public void saveStudent(Student student);
    public void fetchinfo(Student student);
}

StudentDaoImpl 中的fetchinfo 实现是:

public void fetchinfo(Student student) {
    String hql = "select password from student where email = :email";
    sessionFactory.getCurrentSession().createSQLQuery(hql)
        .setParameter("email", student.getEmail()).uniqueResult();
}

StudentService接口是:

public interface StudentService {
    Student addNewStudent(String name, String username, String email, String password);
    void sendEmail(Student student);
    Student fetchinfo(String email);
}

StudentServiceImpl 是:

public User fetchinfo(String email) {
    Student student = new Student(email);
    studentDao.fetchinfo(student);
    return student;
}

public void sendEmail(Student student) {
    mailService.accountActivation(student);
}

现在,问题是:一封邮件被发送到学生的邮件地址,但密码是null。有人可以解释为什么会这样吗?

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    StudentDaoImpl 中,您没有从数据库查询结果中设置密码属性。将相关行改写为:

    student.setPassword(sessionFactory.getCurrentSession().createSQLQuery(hql)
        .setParameter("email", student.getEmail()).uniqueResult());
    

    更新

    当我们在 Hibernate 中时,按照惯例,Student 实体应该有每个属性的 getter 和 setter。然后我将StudentDaoImpl重写为:

    public void fetchinfo(String email) {
    
        String hql = "select s from student s where s.email = :email";
    
        return (Student)sessionFactory.getCurrentSession().createSQLQuery(hql)
          .setParameter("email", email).uniqueResult();
    
    }
    

    ..并用student = studentDao.fetchinfo(email); 调用它(当然方法的命名应该改变)。

    【讨论】:

    • 我没有将密码字段设置为对象..为什么要使用它?
    • 我的 UserDao,我有“public void fetchUserinfo(User user);”..那么我也必须编辑这个字段..我是 r8 吗?
    • 我使用了你的代码..它显示错误:-- java.lang.String 不能转换为 com.news.Student
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2012-12-18
    • 2013-08-21
    • 1970-01-01
    • 2014-09-24
    • 2021-12-26
    • 1970-01-01
    相关资源
    最近更新 更多