Имею вот такой меппинг:
<class name="ClassTable" table="Table">
<id name="Id" column="id">
<generator class="native"/>
</id>
<property name="Shortname" column="SHORTNAME" not-null ="false" insert ="false" update ="false"/>
<loader query-ref="myQuery"/>
</class>
<sql-query name="myQuery">
<return alias="tab" class="ClassTable">
<return-property name="Id" column="myId"></return-property>
<return-property name="Shortname" column="myShortname"></return-property>
</return>
select tab.id as myId, tab.SHORTNAME as myShortname
from Table tab where tab.id = ? order by tab.SHORTNAME
</sql-query>
Я думаю что при выполнении session.CreateCriteria мне вернется заполненный объект так как я определил в "myQuery", но мне возвращается заполненный объект просто как
SELECT * FROM Table
а если я меняю меппинг, на такой
<class name="ClassTable">
<id name="Id" column="id">
<generator class="native"/>
</id>
<property name="Shortname" column="SHORTNAME" not-null ="false" insert ="false" update ="false"/>
<loader query-ref="myQuery"/>
</class>
<sql-query name="myQuery">
<return alias="tab" class="ClassTable">
<return-property name="Id" column="myId"></return-property>
<return-property name="Shortname" column="myShortname"></return-property>
</return>
select tab.id as myId, tab.SHORTNAME as myShortname
from Table tab where tab.id = ?
</sql-query>
т.е. убираю свойство table="Table", то NHibernate строит неправильный SQL запрос:
SELECT * FROM ClassTable
и естественно не работает потому что такой таблицы нет.
Кто подскажет, что я неправильно делаю
Спасибо.
Здравствуйте, 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>Спасибо.
Это не NHibernate строит неправильный запрос, это вы не понимаете, что делаете
1. Во первых, оно не будет работать для критериев. Это не entities loader, а entity loader (Get<>, Find<>). Такой лоадер должен принимать параметр id, и все.
2. Во-вторых, вы используете чистый SQL, в то время как необходимо использовать {H-SQL} (не путайте с hql)
select id as {tab.myId}, SHORTNAME as {tab.myShortname} from Table where id = ?
Здравствуйте, 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 = ?