2011-01-20 2 views
24

У меня есть проект, в котором я использую NHibernate для обработки привязок к базе данных. До сих пор я в основном использовал основы, когда дело доходило до запросов. Теперь я борюсь с более сложным запросом, и я замечаю новые части NHibernate. В частности, мне любопытно, SetProjection, что кажется важным при выполнении запросов.Что такое проекция в NHibernate?

Что такое проекция и как я обычно ее использую? Я предполагаю, что проекция является общим термином, когда речь идет о базах данных, поэтому вы можете также дать более общие ответы.

+0

http://en.wikipedia.org/wiki/Projection_(relational_algebra) –

ответ

29

Проекция, как сказал Антуан, является преобразованием. С точки зрения запроса является:

SELECT *PROJECTION* FROM Table 

*PROJECTION* это выражение для преобразования данных.

Пример:

SELECT * FROM ORDER 

Критерии эквивалент будет:

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

Нет проекции здесь, мы берем данные без трансформации. Если мы хотим:

SELECT NAME FROM PRODUCT 

Здесь входит в себя класс Projection. Этот запрос может быть переписан в критерии запроса, как:

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

Так мы проецируем все строки в один элемент: name поле.

Есть и другие прогнозы: Projection.rowCount(), например (для COUNT(*))

+0

бы рад услышать причину downvote – Andrey

+0

Спасибо! Разъяснение. И да, я начал с поискового робота, но на самом деле я не нашел ответа. Btw; ничто не было от меня. +1 – stiank81

+3

Что касается первой строки вашего ответа, я попал сюда с первого результата google =) –

6

Я не знаю о NHibernate, но в целом проекция является преобразованием набор в другой набор. В SQL это выражается как SELECT.

Смежные вопросы