2011-01-20 101 views
24

我有一个项目,我正在使用NHibernate处理绑定到数据库。到目前为止,我一直在使用基本的查询。现在我正在努力处理更难的查询,并且注意到了NHibernate的新部分。特别是我很好奇SetProjection,这在查询时似乎很重要。什么是NHibernate中的投影?

什么是投影,我将如何典型地使用它?我假设投影是数据库的一个总称,因此欢迎您提供更一般的答案。

+0

http://en.wikipedia.org/wiki/Projection_(relational_algebra) – 2011-01-20 13:27:02

回答

29

安托万所说的预测是变革。在查询方面它是:

SELECT *PROJECTION* FROM Table 

*PROJECTION*是数据转换的表达式。

例子:

SELECT * FROM ORDER 

的准则等效是:

List orders = session.createCriteria(Order.class).list(); 

这里没有投影,我们把数据无需转换。如果我们想要一个:

SELECT NAME FROM PRODUCT 

在这里,投影类发挥作用。上面的查询可以改写成一个标准的查询为:

List products=session.createCriteria(Product.class) 
    .setProjection(Projection.property(\"name\")) 
    .list(); 

所以我们项目中的所有行到单个项目:name场。

还有其他的预测:Projection.rowCount()例如(用于COUNT(*)

+0

会很高兴听到downvote – Andrey 2011-01-20 12:47:31

6

我不知道NHibernate,但总的来说,投影是一个转换一套到另一套。在SQL中,它表示为SELECT。