Re[2]: Custom SQL NHibernate
От: Geny Украина  
Дата: 16.12.09 12:34
Оценка:
Здравствуйте, meowth, Вы писали:

M>Здравствуйте, Geny, Вы писали:


G>>Имею вот такой меппинг:

G>>
G>>  <class name="ClassTable" table="Table">
G>>    <id name="Id" column="id">
G>>      <generator class="native"/>
G>>    </id>
G>>    <property name="Shortname"  column="SHORTNAME" not-null ="false" insert ="false" update ="false"/>
G>>    <loader query-ref="myQuery"/>
G>>  </class>
  
G>>  <sql-query name="myQuery">
G>>    <return alias="tab" class="ClassTable">
G>>      <return-property name="Id" column="myId"></return-property>
G>>      <return-property name="Shortname" column="myShortname"></return-property>
G>>    </return>
G>>    select tab.id as myId, tab.SHORTNAME as myShortname
G>>    from Table tab where tab.id  = ? order by tab.SHORTNAME
G>>  </sql-query>
G>>

G>>Я думаю что при выполнении session.CreateCriteria мне вернется заполненный объект так как я определил в "myQuery", но мне возвращается заполненный объект просто как
G>>
G>>SELECT * FROM Table
G>>

G>>а если я меняю меппинг, на такой
G>>
G>>  <class name="ClassTable">
G>>    <id name="Id" column="id">
G>>      <generator class="native"/>
G>>    </id>
G>>    <property name="Shortname"  column="SHORTNAME" not-null ="false" insert ="false" update ="false"/>
G>>    <loader query-ref="myQuery"/>
G>>  </class>
  
G>>  <sql-query name="myQuery">
G>>    <return alias="tab" class="ClassTable">
G>>      <return-property name="Id" column="myId"></return-property>
G>>      <return-property name="Shortname" column="myShortname"></return-property>
G>>    </return>
G>>    select tab.id as myId, tab.SHORTNAME as myShortname
G>>    from Table tab where tab.id  = ?
G>>  </sql-query>
G>>

G>>т.е. убираю свойство table="Table", то NHibernate строит неправильный SQL запрос:
G>>
G>>SELECT * FROM ClassTable
G>>

G>>и естественно не работает потому что такой таблицы нет.

G>>Кто подскажет, что я неправильно делаю

G>>Спасибо.
M>Это не NHibernate строит неправильный запрос, это вы не понимаете, что делаете

Для понимания что я делаю, что бы лишний раз объяснили, в форум и пишу.. собственно))))

M>1. Во первых, оно не будет работать для критериев. Это не entities loader, а entity loader (Get<>, Find<>). Такой лоадер должен принимать параметр id, и все.


Спасибо, понятно...

M>2. Во-вторых, вы используете чистый SQL, в то время как необходимо использовать {H-SQL} (не путайте с hql)

M>select id as {tab.myId}, SHORTNAME as {tab.myShortname} from Table where id = ?
Заранее спасибо...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.