【发布时间】:2026-02-22 18:00:02
【问题描述】:
我正在尝试从数据库中查询单个对象,每当我执行应用程序时,它都会引发空指针异常,但是当我查询整个表并将其放在列表中时,我会得到所有结果配置没问题,我可以访问数据库。这是引发错误的代码部分:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.erp.entity.User;
@Repository
public class UsersDAOImpl implements UsersDAO {
@Autowired
private SessionFactory sessionFactory;
@Override
@Transactional
public User getUser(String username) {
Session currentSession = sessionFactory.getCurrentSession();
String hql = "FROM User WHERE username = '" + username + "'";
Query<User> query = currentSession.createQuery(hql, User.class);
User user = (User) query.getSingleResult();
return user;
}
@Override
@Transactional
public List<User> getUsers() {
Session currentSession = sessionFactory.getCurrentSession();
Query<User> query = currentSession.createQuery("FROM User", User.class);
List<User> users = query.getResultList();
return users;
}
}
这是抛出的错误:
Servlet.service() for servlet [dispatcher] in context with path [/ERPapplication] threw exception[Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException at com.erp.dao.UsersDAOImpl.getUser(UsersDAOImpl.java:23) at com.erp.controller.LoginController.greeting(LoginController.java:39)
这是控制器类:
@Controller
@RequestMapping("/erp")
public class LoginController {
@Autowired
private UsersDAO usersDAO;
@RequestMapping("/list")
public String listUsers(Model model) {
List<User> users = usersDAO.getUsers();
model.addAttribute("users", users);
return "list-users";
}
@RequestMapping("/login")
public String login(Model model) {
return "login";
}
@RequestMapping("/test")
public String greeting(Model model) {
UsersDAO usersDAO = new UsersDAOImpl();
if(usersDAO.getUser("username").getUsername().equals("username")) {
return "greeting";
} else {
return "list-users";
}
}
}
【问题讨论】:
-
第 23 行是哪一行?
-
你是通过它的“用户名”来查询用户,你不应该通过用户 ID 来做吗?
-
第 23 行是 getUser() 方法中的 Session currentSession = sessionFactory.getCurrentSession()。
-
我试过了,但错误仍然存在:Session currentSession = sessionFactory.getCurrentSession(); String hql = "FROM User WHERE username = '" + username + "'";查询 查询 = currentSession.createQuery(hql, User.class);用户 user = (User) query.getSingleResult();返回用户;
-
你有一个空指针异常——这取决于你,而不是 Spring。例外是在您的 Controller 类中,而不是您发布的那个。您没有阅读异常消息吗?
标签: java mysql spring hibernate