何时使用Hibernate投影?

red*_*ddy 41 hibernate hibernate-criteria nhibernate-projections

我对Hibernate的预测标准有点困惑.何时使用预测以及何时使用标准?

请帮我.谢谢!

Xav*_*ica 82

它们不是互斥的,你可以同时使用它们.预测通常用于某些标准的背景下.

简而言之,Hibernate Projections用于仅查询您使用Criteria查询的实体或实体组的属性的子集.您还可以使用Projections指定distinct子句和聚合函数max,sum等等.这就像指你获取数据.就像修改selectSQL查询中的子句一样.

Hibernate Criteria用于定义数据必须满足的条件才能被选中.这就像提到如何是你获取数据.就像修改SQL查询的fromwhere子句一样.

请注意,这个怎么样,哪个不是严格正确的,它只是一个旨在帮助OP的方向.你可以改变你与提取数据createCriteria(String associationPath)的实例.

我建议看一下这篇文章Hibernate:Criteria Queries in Depth

  • count() as -> return (Number) session.createCriteria("Book").setProjection(Projections.rowCount()).uniqueResult(); (3认同)

Ris*_*ain 5

投影用于执行聚合操作并获得单列查询,使用限制我们可以访问一行,但使用投影我们可以访问整个

前任 -

public static void main(String[] args) {
    SessionFactory factory = new Configuration().configure().addAnnotatedClass(Student.class).buildSessionFactory();
    Session session = factory.getCurrentSession();
    try {
        session.beginTransaction();
        Criteria c = session.createCriteria(Student.class);
        Projection p = Projections.property("lastName");
        List<String> students = c.setProjection(p).list();
        for(String s:students)
            System.out.println(s);
        session.getTransaction().commit();
        session.close();
    } finally {
        factory.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我使用投影调用将投影属性“名称”添加到条件中。它返回 winchester winchester winchester winchester ,它是表中的 lastName COLUMN

输出 =

Hibernate: select this_.last_name as y0_ from student this_ winchester winchester winchester winchester

注意 -我们只能添加一个投影,如果我们添加超过 1 个投影,则前一个投影将被覆盖。如果您想添加多个投影,您将需要 ProjectionList 类

原表 -

在此处输入图片说明