13

在以下代码中,我试图获取包含数据库中所有产品的产品列表:

public List<Products> getAllProducts() throws Exception{
    try{
     List<Products> products ;
    org.hibernate.Transaction tx = session.beginTransaction();
    products = session.createSQLQuery("SELECT * FROM Products").list();
    if(products.size() > 0)
    {
        return products;
    }
    return null;  
    }
    catch(Exception e)
    {
        throw e;
    }
}

但是抛出了这个异常:

[Ljava.lang.Object; cannot be cast to mediatek.Products 
4

6 回答 6

39
List<Products> list = session.createCriteria(Products.class).list();

这将为您提供数据库中产品表的所有记录

于 2013-01-20T17:54:48.027 回答
7

您的回答不仅增加了演员阵容,而且从 SQL 切换到 HQL。由于您的第二个查询是在 HQL 中,Hibernate 能够使用映射信息来知道要返回什么类。这是在 Hibernate 中做事的首选方式,但如果您出于某种原因必须使用 SQL,您可以通过以下方式实现相同的目标:

(List<Products>)session.createSQLQuery("SELECT * FROM Products").addEntity(Products.class).list();
于 2013-01-20T17:21:57.753 回答
1

在 Hibernate 5 中,这些session.createCriteria方法已被弃用。您将需要CriteriaBuilder从那里使用和查询来获取产品的通用列表,而不仅仅是List.

进口

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;

代码

CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Products> criteria = builder.createQuery(Products.class);
criteria.from(Products.class);
List<Products> products = session.createQuery(criteria).getResultList();
于 2020-10-30T20:47:25.697 回答
0

忘记键入转换查询。它现在正在工作。

List<Products> products  = (List<Products>) session.createQuery("from Products").list();
于 2013-01-20T11:07:48.210 回答
0

如果您使用 sql 查询,则应在查询的最后添加此行以获得所需的列表:

.setResultTransformer(Transformers.aliasToBean(testDTO.class)).list();
于 2020-04-14T04:52:29.700 回答
0

例如你有代码:

Session session = getSessionFactory().openSession();
Transaction transaction = null;
try {
SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM schema.yourtable WHERE param = :param");
            sqlQuery.setString("param", "someParam");

如果您的下一步是:

List list = sqlQuery.list();

您将收到带有行的列表。您可以在调试中看到您的 Entity.class 参数,但 cat 使用您的实体转换为 List:

List<Entity> list = (List<Entity>) sqlQuery.list();

在这一点上将出现 ClassCastException!

如果您需要收到带有实体的列表,则必须将实体类型添加到 sql 查询中:

List<Entity> list = (List<Entity>)sqlQuery.addEntity(Entity.class).list();

就这样。我希望有人会帮忙。

于 2018-11-17T23:11:23.843 回答