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