Search code examples
.netnhibernateprojection

What is a Projection in NHibernate?


I have a project where I'm using NHibernate to handle bindings to the database. So far I have mostly been using the basics when it comes to queries. Now I'm struggling with a more difficult query, and I notice new parts of NHibernate. In particular I'm curious about SetProjection, which seems to be important when doing queries.

What is a Projection, and how will I typically use it? I am assuming that a projection is a general term when it comes to databases, so you are welcome to give more general answers too..


Solution

  • Projection as Antoine said is transformation. In terms of query it is:

    SELECT *PROJECTION* FROM Table
    

    *PROJECTION* is expression for data transformation.

    Example:

    SELECT * FROM ORDER
    

    The Criteria equivalent would be:

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

    No projection here, we take data without transformation. If we want one:

    SELECT NAME FROM PRODUCT
    

    Here, the Projection class comes into play. The above query can be rewritten into a Criteria query as:

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

    So we project all rows to single item: name field.

    There are other projections: Projection.rowCount() for example (for COUNT(*))