Hibernate从数据库中获取List

时间:2013-01-20 10:38:42

标签: java hibernate

在下面的代码中,我试图获得一个包含数据库中所有产品的产品列表:

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 

6 个答案:

答案 0 :(得分:37)

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

这将为您提供数据库

中产品表的所有记录

答案 1 :(得分:7)

您的答案不仅会添加强制转换,还会从SQL切换到HQL。由于您的第二个查询是在HQL中,Hibernate能够使用映射信息来知道要返回的类。这是在Hibernate中执行操作的首选方法,但如果由于某种原因必须使用SQL,则可以实现相同的目的:

(List<Products>)session.createSQLQuery("SELECT * FROM Products").addEntity(Products.class).list();

答案 2 :(得分:0)

忘记输入强制转换查询。它现在正在运作。

List<Products> products  = (List<Products>) session.createQuery("from Products").list();

答案 3 :(得分: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参数,但可以通过实体将其强制转换为List:

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

这时将是ClassCastException!

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

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

仅此而已。希望有人能帮忙。

答案 4 :(得分:0)

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

.setResultTransformer(Transformers.aliasToBean(testDTO.class)).list();

答案 5 :(得分:0)

在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();