我正在使用NHibernate搜索NHibernate 3.0 GA。NHibernate搜索N + 1問題
我有這樣的代碼在我的產品資源庫:
public IList<Product> Find(string term)
{
var productFields = new[] { "Name", "Description" };
var importance = new Dictionary<String, float>(2) { { "Name", 4 }, { "Description", 1 } };
var analyzer = new StandardAnalyzer();
var parser = new MultiFieldQueryParser(
productFields,
analyzer,
importance);
var query = parser.Parse(term);
var session = Search.CreateFullTextSession(NHibernateSession.Current);
var tx = session.BeginTransaction();
var fullTextQuery = session.CreateFullTextQuery(query);
fullTextQuery.SetFirstResult(0).SetMaxResults(20);
var results = fullTextQuery.List<Product>();
tx.Commit();
return results;
}
在NH探查,我可以看到一個select語句是爲找到的每個產品發行。我錯過了什麼?
我從2009年發現this thread,但大概這個bug已經修復。
EDIT [06/06/2011]:
我的屬性映射就如下的協會去:
mapping.HasManyToMany(c => c.Categories)
.Table("CatalogHierarchy")
.ParentKeyColumn("child_oid")
.ChildKeyColumn("oid")
.Cascade.None()
.Inverse()
.LazyLoad()
.AsSet();
mapping.HasMany(c => c.Variants)
.Table("CatalogProducts")
.Where("i_ClassType=2")
.KeyColumn("ParentOID")
.Cascade.SaveUpdate()
.AsSet();
我真的不希望急於取回所有類別。
我已將我的映射添加爲編輯。你是說我應該急於加載我的產品。 ... 我怎麼做?用FetchType.Join替換.LazyLoad()? – autonomatt 2011-06-06 12:17:58
是的,應該這樣做。 – 2011-06-06 14:14:24