我正在使用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();
}
我从登录页面获取登录信息。我确定它存在(它不会抛出'没有结果'的例子)。
请求似乎很好,但他无法执行最后一行,并且正确投射。
答案 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"