Java Hibernate从数据库获取列表

Java Hibernate从数据库获取列表,java,hibernate,Java,Hibernate,在以下代码中,我试图获取包含数据库中所有产品的产品列表: public List<Products> getAllProducts() throws Exception{ try{ List<Products> products ; org.hibernate.Transaction tx = session.beginTransaction(); products = session.createSQLQuery("SELECT * F

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

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;
    }
}

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

List<Products> products  = (List<Products>) session.createQuery("from Products").list();
List products=(List)session.createQuery(“来自产品”).List();

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

(List<Products>)session.createSQLQuery("SELECT * FROM Products").addEntity(Products.class).list();
(List)session.createSQLQuery(“从产品中选择*).addEntity(Products.class).List();
List List=session.createCriteria(Products.class).List();

这将为您提供数据库中products表的所有记录,例如您有代码:

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<Entity> list = (List<Entity>) sqlQuery.list();
List List=(List)sqlQuery.List();
在这一点上将是ClassCastException

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

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

就这些。我希望有人能提供帮助。

如果您使用sql查询,您应该在查询的最后一行添加以下内容,以获得所需的列表:

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

在Hibernate 5中,不推荐使用
会话.createCriteria
方法。 您将需要使用and查询来获取产品的通用列表,而不仅仅是
列表

进口

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

CriteriaBuilder=session.getCriteriaBuilder();
CriteriaQuery criteria=builder.createQuery(Products.class);
标准。来源(产品。类别);
列表产品=session.createQuery(条件).getResultList();

session.createCriteria已弃用如果createCriteria现在已弃用,您会使用什么替代方法?Hibernate的源代码建议使用JPA标准:
@deprecated(从5.2开始)对于session,请使用JPA标准
.setResultTransformer(Transformers.aliasToBean(testDTO.class)).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();