如何使用hibernate获取表中的所有数据?
Posted
技术标签:
【中文标题】如何使用hibernate获取表中的所有数据?【英文标题】:How to get all data in the table with hibernate? 【发布时间】:2017-08-19 15:40:59 【问题描述】:public Service getServiceData()
return (Service)ServiceDaoImpl.getSession().get(Service.class, new Integer(1));
get 方法得到一个。 我想获取jsp页面的所有数据。
【问题讨论】:
你能给我看看链接或例子吗? 【参考方案1】:在 Hibernate 5 中,createCriteria
已被弃用,使用类似的东西
private static <T> List<T> loadAllData(Class<T> type, Session session)
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<T> criteria = builder.createQuery(type);
criteria.from(type);
List<T> data = session.createQuery(criteria).getResultList();
return data;
用法
Session session = HibernateUtils.getSession();
List<User> users = loadAllData(User.class, session);
【讨论】:
在 Hibernate 5 中,createCriteria
已被弃用。使用@Babu 的解决方案。这个通用方法写的很好?【参考方案2】:
试试下面的代码,用你的实体类替换实体
@SuppressWarnings("unchecked")
public List<Entity> getAlldata()
try
return sessionFactory.getCurrentSession().createCriteria(Entity.class).list();
catch (Exception e)
return new ArrayList<>();
【讨论】:
您正在返回 Entity 但您的方法签名声称您的函数将返回 List尝试如下从表中获取所有行
@SuppressWarnings("unchecked")
public List<Service> Service getServiceData()
return ServiceDaoImpl.getSession().createQuery("from Service").list();
【讨论】:
ServiceDaoImpl.getSession().createQuery("from Service").list()
根据问题。查询也可以是select S from Service S
。两个查询都是正确的。
你也可以删除session.close();
,如果你使用的是@Transactional
或xml的spring事务管理。
错误:类型不匹配:无法从服务转换为列表public List<Service> getServiceAll()
return ServiceDaoImpl.getSession().createCriteria(Service.class).list();
【讨论】:
createQuery("from Product p"); 更好【参考方案5】:配置cfg = new Configuration(); cfg.configure("hibernate.cfg.xml");
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
/* Selecting all objects(records) start_______________________ */
Query qry = session.createQuery("from Product p");
List l =qry.list();
System.out.println("Total Number Of Records : "+l.size());
Iterator it = l.iterator();
while(it.hasNext())
Object o = (Object)it.next();
Product p = (Product)o;
System.out.println("Product id : "+p.getProductId());
System.out.println("Product Name : "+p.getProName());
System.out.println("Product Price : "+p.getPrice());
System.out.println("----------------------");
session.close();
factory.close();
【讨论】:
【参考方案6】:自List<Entity> list = session.createCriteria(Entity.class).list();
已弃用,
您可以使用CriteriaBuilder()
。
try ( Session session = sessionFactory.openSession())
// Create CriteriaBuilder
CriteriaBuilder builder = session.getCriteriaBuilder();
// Create CriteriaQuery
CriteriaQuery<Entity> criteria = builder.createQuery(Entity.class);
// Specify criteria root
criteria.from(Entity.class);
// Execute query
List<Entity> entityList = session.createQuery(criteria).getResultList();
for (Entity e : entityList)
// load the data
点击here查看github示例。
【讨论】:
与旧方法相比,“新”方法真的需要那么长吗?以上是关于如何使用hibernate获取表中的所有数据?的主要内容,如果未能解决你的问题,请参考以下文章