我正在使用 hibernate 与我的数据库交互,它是一个 MySQL 数据库。我可以用 EntityManager 写入其中,但是当我想查询我的数据库并获取一些信息时,我总是会收到此错误:
java.lang.ClassCastException
:[Ljava.lang.Object;
cannot be cast tocom.projetJava.NoteTonSTA.model.Speakers
Speakers
是我的实体。就像我说的,我设法坚持下去没有任何问题。
这是我的代码的一部分:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String login = request.getParameter("login");
String password = request.getParameter("password");
String queriedPass = null;
EntityManager em = emf.createEntityManager(); //emf is declared before. It's an EntityManagerFactory object.
try {
Query querySpeaker = (Query) em.createQuery("SELECT s.password, s.email, s.first_name, s.last_name FROM Speakers s WHERE email=:login");
querySpeaker.setParameter("login", login);
Speakers auth = (Speakers) querySpeaker.getSingleResult();
}
我从登录页面获取登录信息。我确定它存在(它不会抛出“无结果”异常)。
请求似乎很好,但他无法执行最后一行,也无法正确转换。
最佳答案
如果您在 SELECT
中指定特定属性的列表(即 SELECT s.password, s.email, s.first_name, s.last_name
),那么 Hibernate将返回一个仅包含这些属性的数组,而不是整个实体。这就是您得到 ClassCastException
的原因。
要获取实体,请省略 SELECT
子句,例如
em.createQuery("FROM Speakers WHERE email=:login");
关于java - 无法从我的数据库中获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8583163/