我有項目。每個項目都屬於一個組。並且每個項目都擁有一個(可能爲空)的標籤列表(字符串),用於增強文本搜索。搜索應找到與其描述相匹配的項目,他們所屬組的描述或一個或多個標籤(全部在或條件下)。QueryOver過濾字符串集合:NullReferenceException
我試圖通過以下QueryOver通過搜索鍵選擇項目。
<class name="Item" table="Items">
<id name="Id">
<generator class="guid.comb" />
</id>
<natural-id>
<property name="Code" not-null="true" />
</natural-id>
<property name="Description" not-null="true" />
<many-to-one name="Group" column="ID_Group" not-null="true" fetch="join" />
<property name="ExpiryDate" />
<list name="Tags" table="Items_Tags">
<key column="ID_Item" />
<index column="Idx" />
<element column="Tag" />
</list>
</class>
查詢執行拋出一個NullReferenceException:
Item i = null;
ItemGroup g = null;
String tag = null;
session
.QueryOver<Item>(() => i)
.JoinAlias(x => x.Group,() => g, JoinType.InnerJoin)
.JoinAlias(x => x.Tags,() => tag, JoinType.LeftOuterJoin) //left outher join because it is possible for an item to have no tags at all.
.Where(
new Disjunction()
.Add(Restrictions.On(() => p.Description).IsInsensitiveLike(searchKey, MatchMode.Anywhere))
.Add(Restrictions.On(() => g.Description).IsInsensitiveLike(searchKey, MatchMode.Start))
.Add(Restrictions.On(() => tag).IsInsensitiveLike(searchKey, MatchMode.Start)) //this condition throws an exception
)
.Take(maxResults)
.Future();
Item類如下映射。不會拋出異常中的最後一個條件。
我沒有擺脫這種不使用魔術字符串。
。新增(Restrictions.On(()=>標記).IsInsensitiveLike(searchKey,MatchMode.Start))這條線上的標籤應該是tag.Tag,因爲您已將標記表的別名定義爲標記,但在搜索中未提及字段 – Deepesh
標記是純String對象。它沒有Tag屬性。 – Marcello