Jestem nowy w NHibernate i staram się nauczyć, jak wysyłać zapytania do moich danych.Zapytanie z NHibernate
Poniżej znajduje się konfiguracja xml. Wyświetlany jest tylko przepis.
Chcę mieć możliwość wysyłania zapytań do receptur przez recipetitle ze słów kluczowych wpisanych , a także składników z nazwy składnika.
Możesz więc wpisać np. "Wino z makaronem".
To jest to, co próbowałem, ale daje mi błąd.
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%'";
Chcę również załadować kolekcje.
Czy mam zamiar zapytać w prawo? Potrzebuję móc zbudować ciąg kwerendy z moich kryteriów wyszukiwania. To byłoby łatwe formować mnie w 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>
Aby rozwiązać ten problem, można uzyskać DistinctRootEntityResultTransformer –
Dlaczego chcesz używać FetchMode.Join zamiast FetchMode.Eager dla tych obciążeń, jeśli naprawdę zamierzasz używać obiektów podrzędnych? –
Nie widzę, jak to jest dynamiczne, gdy masz mocno zakodowane słowa kluczowe.Jak byś zapytał, czy dałem ci ciąg słów rozdzielonych spacjami ??? – Malcolm