优化非hibernate查询

本文关键字:查询 hibernate 优化 | 更新日期: 2023-09-27 18:19:16

我有以下关系

    class Author
    {
       int Id;
    }
    class Publisher
    {
       int Id;
    }
    class Book
    {
       Publisher Publisher;
       Author Author;
       DateTime PublishDate;
    }

我想优化以下查询:

    foreach (Publisher)
    {
       foreach (Author)
       {
          session.Query<Book>()
             .Where(x=> x.Author.Id == Author.Id && x.Publisher.Id ==Publisher.Id)
             .OrderByDescending(x=> x.PublishDate)
             .Take(5);
       }
    }

我意识到这段代码的性能很糟糕,我如何改进它并在更少的查询中获得相同的结果?

非常感谢!

优化非hibernate查询

我们有很多方法可以做到。这取决于你的用例你先得到哪个对象

这里我提到了一种方法

DetachedCriteria forBook=DetachedCriteria.For<Book>();
forBook.CreateCriteria("Publisher");
forBook.CreateCriteria("Author");
ICriteria executableCriteria=forBook.GetExecutableCriteria(session);
executableCriteria.SetFirstResult(0).SetMaxResult(5);
executableCriteria.AddOrder(Order.Desc("PublishDate"));
executableCriteria.List<Book>();