Я новичок в NHibernate, и я пытаюсь узнать, как запросить мои данные.Запрос с NHibernate
Ниже приведена конфигурация xml. Отображается только рецепт.
Я хочу иметь возможность запрашивать рецепты по рецепту из введенных ключевых слов , а также ингредиенты из имени ингредиента.
Таким образом, вы можете ввести «макаронное вино», например.
Это то, что я пробовал, но дает мне ошибку.
hql = "from Recipe r " +
"left join r.Images " +
"inner join r.User " +
"inner join r.Ingredients i " +
"where i.IngredientName Like '%pasta%' OR i.IngredientName Like '%wine%' OR r.RecipeTitle Like '%pasta' OR r.RecipeTitle Like '%wine%'";
Я хочу также загрузить коллекцию.
Я собираюсь спросить правильно ?? Мне нужно построить строку запроса из моих критериев поиска. Это было бы легко сформировать меня в SQL.
Malcolm
<class name="Recipe" table="Recipes" xmlns="urn:nhibernate-mapping-2.2">
<id name="RecipeID" type="Int32" column="RecipeID">
<generator class="identity" />
</id>
<property name="RecipeTitle" type="String">
<column name="RecipeTitle" />
</property>
<property name="Completed" type="Boolean">
<column name="Completed" />
</property>
<property name="ModifiedOn" type="DateTime">
<column name="ModifiedOn" />
</property>
<property name="Rating" type="Double">
<column name="Rating" />
</property>
<property name="PrepTime" type="Int32">
<column name="PrepTime" />
</property>
<property name="CookTime" type="Int32">
<column name="CookTime" />
</property>
<property name="Method" type="String">
<column name="Method" />
</property>
<bag name="Images" inverse="true" cascade="all">
<key column="RecipeID" />
<one-to-many class="OurRecipes.Domain.RecipeImage, OurRecipes.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
<many-to-one name="Category" column="CategoryID" />
<bag name="Comments" inverse="true" cascade="all">
<key column="RecipeID" />
<one-to-many class="OurRecipes.Domain.Comment, OurRecipes.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
<many-to-one name="User" column="EnteredByID" />
<bag name="Ingredients" inverse="true" cascade="all">
<key column="RecipeID" />
<one-to-many class="OurRecipes.Domain.Ingredient, OurRecipes.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
</class>
Чтобы решить эту проблему, вы можете получить DistinctRootEntityResultTransformer –
Зачем использовать FetchMode.Join вместо FetchMode.Eager для этих нагрузок, если вы действительно намеревались использовать дочерние объекты? –
Я не вижу, как это динамично, когда вы жестко закодировали ключевые слова.Как бы вы запросили, если бы я дал вам строку слов, разделенных пробелами ??? – Malcolm