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

时间:2011-12-20 23:08:40

标签: java hibernate jpa

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

  

java.lang.ClassCastException[Ljava.lang.Object;无法投放到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();
    }

我从登录页面获取登录信息。我确定它存在(它不会抛出'没有结果'的例子)。

请求似乎很好,但他无法执行最后一行,并且正确投射。

2 个答案:

答案 0 :(得分:3)

如果在SELECT(即SELECT s.password, s.email, s.first_name, s.last_name)中指定特定属性的列表,则Hibernate将返回仅包含这些属性的数组,而不是整个实体。这就是你得到ClassCastException

的原因

要获取实体,请省略SELECT子句,例如

em.createQuery("FROM Speakers WHERE email=:login");

答案 1 :(得分:0)

尝试使用

"SELECT s FROM Speakers s WHERE email=:login"