何时使用Hibernate投影?

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

请帮帮我。 谢谢!

他们不是相互排斥的,你可以同时使用两者。 预测通常用于某些标准的上下文中。

简单来说,Hibernate Projections用于仅查询使用Criteria查询的实体或实体组的一部分属性。 您还可以使用Projections来指定distinct子句和聚合函数,如maxsum等等。 这就像是指你正在提取哪些数据。 像修改SQL查询中的select子句一样。

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

请注意,这是如何以及哪个不是严格正确的,这只是一个旨在帮助OP的方向。 例如,您可以使用createCriteria(String associationPath)更改要提取的数据。

我build议看看这篇文章hibernate:条件查询深入

投影是“org.hibernate.criterion”包中给出的一个接口,Projections是一个在同一个包中给出的类,实际上Projection是一个接口,Projections是一个类,是投影对象的工厂。

在Projections类中,我们有所有的静态方法,这个类的每个方法都返回Projection接口对象。

如果我们想要将一个Projection对象添加到Criteria,那么我们需要调用一个方法setProjection()

请记住,在将投影对象添加到条件的同时,可以一次添加一个对象。 这意味着如果我们添加第二个投影对象,那么这第二个将覆盖第一个(第一个不会工作),所以一次只能有一个投影对象到标准对象

使用标准,如果我们想从数据库中加载部分对象,那么我们需要为要从数据库加载的属性创build一个投影对象

 Criteria crit = session.createCriteria(Products.class); crit.setProjection(Projections.proparty("proName")); List l=crit.list(); Iterator it=l.iterator(); while(it.hasNext()) { String s = (String)it.next(); // ---- print ----- } 

如果我们将多个投影添加到条件,那么添加的最后一个投影将被视为执行看到…

 Criteria crit = session.createCriteria(Products.class); Projection p1 = Projection.property("proName"); Projection p2 = Projection.property("price"); crit.setProjection(p1): crit.setProjection(p2): List l=crit.list();