`

Criteria: Group By Criteria

 
阅读更多


/////////////////////////////////////////////////////////////////////////

import java.util.*;

import java.sql.*;
import org.hibernate.*;
import org.hibernate.criterion.*;

public class Main {
  
  public static void main(String[] args) {
    HibernateUtil.setup("create table Supplier ( id int, name VARCHAR);");
    HibernateUtil.setup("create table Product ( id int, name VARCHAR, description VARCHAR, price double,supplierId int);");
    
    prepareData();
    Session session = HibernateUtil.currentSession();
    
        Criteria crit = session.createCriteria(Product.class);
        ProjectionList projList = Projections.projectionList();
        projList.add(Projections.property("name"));
        projList.add(Projections.groupProperty("name"));

        crit.setProjection(projList);
        List results = crit.list();
        displayObjectsList(results);
    
    
        HibernateUtil.checkData("select * from Supplier");
        HibernateUtil.checkData("select * from Product");

  }
    static public void displayObjectsList(List list)
    {
        Iterator iter = list.iterator();
        if (!iter.hasNext())
        {
            System.out.println("No objects to display.");
            return;
        }
        while (iter.hasNext())
        {
            System.out.println("New object");
            Object[] obj = (Object[]) iter.next();
            for (int i=0;i<obj.length;i++)
            {
                System.out.println(obj[i]);
            }
            
            
        }
    }       


  private static void prepareData(){
        Session session = HibernateUtil.currentSession();

        Supplier supplier1 = new Supplier();
        supplier1.setName("Supplier Name 1");
        session.save(supplier1);
        
        Supplier supplier2 = new Supplier();
        supplier2.setName("Supplier Name 2");
        session.save(supplier2);        
        
        Product product1 = new Product("Product 1","Name for Product 1"2.0);
        product1.setSupplier(supplier1);
        supplier1.getProducts().add(product1);
        session.save(product1);
        
        Product product12 = new Product("Product 2","Name for Product 2"22.0);
        product12.setSupplier(supplier1);
        supplier1.getProducts().add(product12);        
        session.save(product12);
        
        Product product2 = new Product("Product 3""Name for Product 3"30.0);
        product2.setSupplier(supplier2);
        supplier2.getProducts().add(product2);
        session.save(product2);
        
        session.flush();
        HibernateUtil.closeSession();
  }
}



/////////////////////////////////////////////////////////////////////////
public class Product
{
    private int id;
    private Supplier supplier;
    
    private String name;
    private String description;
    private double price;
    
    public Product()
    {
        super();
    }
    
    public Product(String name, String description, double price)
    {
        super();
        this.name = name;
        this.description = description;
        this.price = price;
    }
    
    public String getDescription()
    {
        return description;
    }
    public void setDescription(String description)
    {
        this.description = description;
    }
    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id = id;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
 
    public Supplier getSupplier()
    {
        return supplier;
    }
    public void setSupplier(Supplier supplier)
    {
        this.supplier = supplier;
    }
    
    public double getPrice()
    {
        return price;
    }
    public void setPrice(double price)
    {
        this.price = price;
    }
}



/////////////////////////////////////////////////////////////////////////

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping
   PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
   <class name="Supplier">
      <id name="id" type="int">
         <generator class="increment"/>
      </id>

      <property name="name" type="string"/>
      <bag name="products" inverse="true" cascade="all,delete-orphan">
        <key column="supplierId"/>
        <one-to-many class="Product"/>
      </bag>


   </class>
</hibernate-mapping>



/////////////////////////////////////////////////////////////////////////

import java.util.ArrayList;
import java.util.List;

public class Supplier
{
    private int id;
    private String name;
    private List products = new ArrayList();
    
    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id = id;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    public List getProducts()
    {
        return products;
    }
    public void setProducts(List products)
    {
        this.products = products;
    }
}



/////////////////////////////////////////////////////////////////////////


分享到:
评论

相关推荐

    hibernate如何使用criteria联合查询 group by 的语句

    这个案例是根据分组查询,并且得到每组的条数,不懂得可以q我:1710086675,欢迎认识更多新朋友

    Criteria标准化对象查询小例子

    4. **添加排序和分组**: 如果需要,可以使用Order和GroupBy来设置查询的排序和分组规则。 5. **执行查询**: 将所有的条件和设置传递给EntityManager的createQuery()方法,然后调用getResultList()或getSingleResult...

    Criteria hibernate

    5. **分组(GroupBy)和聚合函数(Projections)** Criteria API也支持分组和聚合操作。通过调用setGroupBy()方法进行分组,使用Projections类的聚合函数,如count(), max(), min()等。 6. **关联查询(Joins)** ...

    Hibernate中Criteria的用法

    String hql = "select s.name ,avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); list = query.list(); ``` 在上面的代码中,我们首先创建了一个 HQL 查询字符串,然后使用 `...

    Hibernate中Criteria的完整用法

    Criteria API可以用于执行包含聚合函数如`avg()`的查询,如HQL中的`"select s.name ,avg(s.age) from Student s group by s.name"`。这可以通过添加投影和分组规则来实现。 7. **本地SQL查询**: 当需要执行原生...

    hibernate criteria的使用方法

    String hql = "select s.name, avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); List[]&gt; list = query.list(); ``` 此处使用 HQL 查询平均年龄,并按名字分组。 - **...

    Hibernate中,利用Criteria查询容器实现sql的写法

    此外,它支持连接查询(join)、分组(group by)和Having条件,可以实现复杂的查询逻辑。 标签中提到的"源码"和"工具",意味着在深入学习Criteria API时,了解其底层实现和与其他工具(如IDE插件)的集成也是很...

    Hibernate中的Criteria的认识

    这会生成类似SQL中的`GROUP BY`子句的查询,对数据进行分组统计。 ### 复杂查询和条件过滤 当需要执行更复杂的查询,比如包含条件过滤的查询时,可以利用`Restrictions`和`Example`。例如,如果要查找与特定用户...

    Hibernate Criteria用法大全.docx

    1. **标准查询简介(QBC:Query By Criteria)** Criteria API 的核心在于`Criteria`对象,它是通过`Session`的`createCriteria()`方法创建的。以下是一个简单的例子,查询所有`Employee`类的实例: ```java ...

    hibernateCriteria的使用.docx

    String hql = "select s.name, avg(s.age) from Student s group by s.name"; Query query = session.createQuery(hql); List[]&gt; list = query.list(); ``` 此查询将返回每个学生名字及对应的平均年龄。 5. 本地SQL...

    criteria-builder:动态构建店铺数据查询的实验

    同时,我们可以通过`groupBy()`和`having()`来实现数据的分组和分组后的条件过滤,进一步提升查询的灵活性。 在实际应用中,CriteriaBuilder可以与ORM框架(如Hibernate或Sequelize)结合,无缝对接后端数据库。...

    hibernate查询

    4. **分组与排序**: 使用`group by`和`order by`子句,如`select e.deptName, count(e) from Employee e group by e.deptName order by count(e) desc`按部门计数并降序排列。 5. **子查询**: 在HQL中可以嵌套查询...

    QBC的使用全集大全

    - **分组(GroupBy)**:通过Criteria的setGroupProperty(String propertyName)或setGroupProperties(String[] propertyNames)方法实现数据的分组。 - **having**:Criteria的addHaving(Criterion having)方法用于...

    Hibernate QBC高级查询.rar

    3. **Criteria查询的构建**:包括选择实体(Select),指定查询的根实体(Root Criteria),添加限制条件(Restrictions),排序(Order),分组(Group By)以及聚合函数(Projections)等。 4. **Join操作**:在...

    夏昕.深入浅出Hibernate示例源代码

    它支持连接(join)、分组(group by)、排序(order by)等复杂查询功能。 8. Criteria的子查询:在Criteria API中,可以通过Subqueries类创建子查询,用于实现复杂的查询逻辑。 9. 查询优化:了解如何使用缓存...

    DetachedCriteria查询

    `criteria.add(Restrictions.sqlRestriction(" project_Id="+projectId+" connect by prior id= prev_ver ")).addxxx();` DetachedCriteria 查询提供了非常灵活的查询方式,可以满足各种复杂的查询需求。

    easy-criteria-3.0.1-beta-sources.rar_JPA 框架_SUM

    EasyCriteria 是一个轻量级的框架用来创建和处理基于元数据、类型安全、可调式、可读和可维护的 JPA 2.0 查询...CriteriaComposer(Student.class).select(AggregateFunction.SUM,Student_.unit).groupBy(Student_.name)

Global site tag (gtag.js) - Google Analytics