如何使用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 - 因为这不会编译。我认为您的意思是“返回列表”;【参考方案3】:

尝试如下从表中获取所有行

@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事务管理。 错误:类型不匹配:无法从服务转换为列表 这个方法返回List,在方法调用使用List list=ServiceDaoImpl.getServiceData() 并迭代这个列表【参考方案4】:
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&lt;Entity&gt; 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获取表中的所有数据?的主要内容,如果未能解决你的问题,请参考以下文章

hibernate:如何选择表中的所有行

如何使用表中的全选复选框获取所有数据?

Hibernate - 如何在 JSP 表中显示对象列表?

将表上的现有条目转换为Hibernate实体对象

如何使用Yii2中的left join从两个表中获取所有列数据

如何通过在数据库中的两个表中使用卷号提及来获取所有详细信息并在 Tkinter GUI 中显示?