java - 无法从我的数据库中获取信息

标签 java hibernate jpa

我正在使用 hibernate 与我的数据库交互,它是一个 MySQL 数据库。我可以用 EntityManager 写入其中,但是当我想查询我的数据库并获取一些信息时,我总是会收到此错误:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.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/

相关文章:

java - REST Controller 中具有一对多关系的实体的递归 JSON View

java - Spark作业失败,因为它找不到hadoop core-site.xml

Java 和类型转换通用对象

java - 是否可以让我的自定义验证注释在持久化时被忽略?

hibernate - Spring Boot 和事务边界

java - JPA - 创建了错误的表

java - 将上传的文件(xls)转换为xml

java - 如何销毁一个线程?

java - JBoss/EJB 与对称 DS

java - JPA 托管实体与 JavaFX 属性