标签: nhibernate-projections

何时使用Hibernate投影?

我对Hibernate的预测标准有点困惑.何时使用预测以及何时使用标准?

请帮我.谢谢!

hibernate hibernate-criteria nhibernate-projections

41
推荐指数
2
解决办法
8万
查看次数

有人可以更好地解释nHibernate中的"预测"吗?

作为nHibernate及其实用程序库的新用户,流畅的nhibernate,我正在努力学习一个好的数据库是危险的.

我对于预测的概念有着极大的困难.具体来说,他们是世界上的什么?

我确实在' 什么是预测?'和' nHibernate中项目 '和' nHibernate,Projections,Definition '等等.我仍然很困惑.到目前为止最有用的帖子是其他StackOverflow问题Colin Ramsay撰写的此博客文章.但我仍然非常困惑.我对数据库的了解至多仍然是入门级的.

我真的不明白什么是预测,我为什么要使用它们,它们正在完成什么,等等.我在博客文章中看到他正在使用它们来获取整数列表(我假设主键)这样他可以在不同的查询中使用它们,但这在它运行的方式和原因上有点模糊.

c# nhibernate nhibernate-projections

30
推荐指数
1
解决办法
1万
查看次数

gorm投射和元信息的丢失

在属性上使用投影时,结果将作为列表返回,其中元素的顺序与投影块中定义的顺序相同.同时,列表中缺少属性名称,这对开发人员来说确实是不利的,因为结果将被传递,并且调用者需要知道哪个值属于哪个属性.有没有办法从Criteria查询返回一个带有属性名称作为值的键的映射?

所以,以下代码:

def c = Trade.createCriteria()
def remicTrades = c.list {

    projections {
        property('title', 'title')
        property('author.name', 'author')
    }
    def now = new Date()
    between('publishedDate', now-365, now)
}
Run Code Online (Sandbox Code Playgroud)

返回:

[['book1', 'author1']['book2', 'author2']]
Run Code Online (Sandbox Code Playgroud)

相反,我希望它返回:

[[book:'book1', author:'author1'][book:'book2', author:'author2']]
Run Code Online (Sandbox Code Playgroud)

我知道我可以在得到结果之后安排这种方式,但我认真地认为标准应该使用属性别名来返回模仿SQL查询结果的地图列表,而不是一个平淡无奇的列表.

grails grails-orm createcriteria nhibernate-projections

8
推荐指数
1
解决办法
2495
查看次数

NHibernate中有任何算术运算预测吗?

我想从NHibernate获取这个SQL:

SELECT SUM(color_pages) * SUM(total_pages)
FROM connector_log_entry
GROUP BY department_name
Run Code Online (Sandbox Code Playgroud)

但我无法在任何地方找到任何算术运算(*)投影.

这是我到目前为止的代码:

Session.QueryOver<ConnectorLogEntry>()
       .SelectList(list => list
           .SelectGroup(m => m.DepartmentName)
           .WithAlias(() => dto.Department)
           .Select(Projections.Sum<ConnectorLogEntry>(m => m.TotalPages))
           //.Select(Projections.Sum<ConnectorLogEntry>(m => m.ColorPages))
           .WithAlias(() => dto.TotalColorPercentage))
       .TransformUsing(Transformers.AliasToBean<DepartmentConsumption>());
Run Code Online (Sandbox Code Playgroud)

c# math nhibernate nhibernate-projections queryover

6
推荐指数
1
解决办法
2953
查看次数

NHibernate Criteria按另一个表中的groupid和itemid的总和选择项目

public class SearchText
{
    public virtual int Id { get; set; }
    public virtual string Text { get; set; }
}

public class SearchTextLog
{
    public virtual int Id { get; set; }
    public virtual SearchText SearchText { get; set; }
    public virtual User User { get; set; }
    public virtual int SearchCount { get; set; }
    public virtual DateTime LastSearchDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我试图根据SearchTextLog中的计数总和选择前5个SearchText项.目前我只能通过首先执行查询来获取前5个项目,然后在第二个查询中使用结果来解决此问题.我想知道是否有人可以向我展示光线,并教我如何将这两个单独的查询整合到一个单元中.

这是我目前的情况:

var topSearchCriteria = Session.CreateCriteria(typeof (SearchTextLog))
            .SetProjection(Projections.ProjectionList()
                            .Add(Projections.GroupProperty("SearchText.Id"))
                            .Add(Projections.Alias(Projections.Sum("SearchCount"), "SearchCount")))
            .AddOrder(Order.Desc("SearchCount"))
            .SetMaxResults(topSearchLimit)
            .List<int>(); …
Run Code Online (Sandbox Code Playgroud)

nhibernate aggregate criteria nhibernate-projections

4
推荐指数
1
解决办法
1万
查看次数

NHibernate Projection查询按日期分组

我想在NHibernate中编写一个Projection查询,按日期对记录进行分组,并为这些记录计算"Tax"字段值.我的问题是数据库的值是DateTime,我将如何按日期而不是时间对记录进行分组.这是我的代码

template.Criteria.SetProjection(
                Projections.ProjectionList()
                .Add(Projections.GroupProperty("IssueDatetime"), "DateVal")
                .Add(Projections.Sum("Tax"), "TotalFare")
            );
Run Code Online (Sandbox Code Playgroud)

数据库将IssueDatetime字段存储为DateTime类型.我想计算每个日期的税,并忽略时间部分.有人可以帮我解决上述要求吗?

c# nhibernate criteria nhibernate-projections

4
推荐指数
1
解决办法
4859
查看次数

Nhibernate计数不同(基于多列)

基本上,我一直在尝试这样做(根据两列计算不同):

select count(distinct(checksum(TableA.PropertyA, TableB.PropertyB))) 
from TableA 
left outer join TableB
on TableA.TableBId = TableB.Id 
where PropertyA like '%123%'
Run Code Online (Sandbox Code Playgroud)

谷歌搜索如何做到这一点,但没有运气.试过这个,但从未真正奏效过.这并不明显基于两个表中的两个属性:

var queryOver = c.QueryOver<TableA>();
TableB tableBAlias = null;
TableA tableAAlias = null;
ProjectionList projections = Projections.ProjectionList();

queryOver.AndRestrictionOn(x => x.PropertyA).IsLike("%123%");
projections.Add(Projections.CountDistinct(() => tableAAlias.PropertyA));

queryOver.JoinAlias(x => x.TableB , () => tableBAlias, JoinType.LeftOuterJoin);
projections.Add(Projections.CountDistinct(() => tableBAlias.PropertyB));

queryOver.Select(projections);
queryOver.UnderlyingCriteria.SetProjection(projections);
return queryOver.TransformUsing(Transformers.DistinctRootEntity).RowCount();
Run Code Online (Sandbox Code Playgroud)

sql nhibernate nhibernate-criteria nhibernate-projections queryover

4
推荐指数
1
解决办法
2497
查看次数

是否可以在Projections,Criteria,Grails中使用聚合函数和属性?

我正在使用Grails Criteria(类似于hibernate标准)来获取给定表中每个部门中获得最高分的学生列表.而我想要的只是Name,DivisionGrade领域.

Name | Division | Grade | Std_id
---------------------------------
AA1  | A        |  2     | 1
AA2  | A        |  4     | 2
BB1  | B        |  2     | 3
BB2  | B        |  5     | 4
Run Code Online (Sandbox Code Playgroud)

我想要的结果是

Name | Division | Grade |
--------------------------
AA2  | A        |  4     |
BB2  | B        |  5     | 
Run Code Online (Sandbox Code Playgroud)

如果我使用以下标准

    def criteria = Student.createCriteria()
    def resultlt = criteria.list {
        projections {
            groupProperty('divison')
            max('grade') …
Run Code Online (Sandbox Code Playgroud)

grails hibernate criteria hibernate-criteria nhibernate-projections

4
推荐指数
1
解决办法
766
查看次数

我可以使用NHibernate Criteria将实体及其子集合投影到类中吗?

我正在使用NH Criteria检索实体并将选择性字段投影到自定义类(有点像将数据投影到ViewModel上以便在MVC视图上显示).

使用ProjectionList很容易:

var emailCriteria = mSession.CreateCriteria<Email>();
emailCriteria.SetProjection(
    Projections.ProjectionList()
        .Add(Projections.Property("Subject"), "Subject")
);
emailCriteria.SetResultTransformer(Transformers.AliasToBean<EmailDataModel>());
var result = emailCriteria.List<EmailDataModel>();
Run Code Online (Sandbox Code Playgroud)

但是,我的实体包含一个集合,我也希望将它带回来,并将其作为集合投影到我的自定义类中.

我的域模型看起来(简化形式)如下:

public class Email {
    public string Subject
    public List<EmailAttachment> Attachments
    etc...
}

public class EmailAttachment {
    public UploadedFile File
}

public class UploadedFile {
    public string Filename
    public UploadedFileData Data
}

public class UploadedFileData {
    public byte[] Data
}
Run Code Online (Sandbox Code Playgroud)

这是我要投影到的"数据模型"类:

public class EmailDataModel {
    public string Subject
    public List<EmailAttachmentDataModel> Attachments
}

public class EmailAttachmentDataModel {
    public string Filename
    public byte[] Data …
Run Code Online (Sandbox Code Playgroud)

collections nhibernate-criteria nhibernate-projections

3
推荐指数
1
解决办法
2155
查看次数

帮助NHibernate Criteria查询groupby属性

我有以下查询,

SearchTemplate Template = new SearchTemplate();
            Template.Criteria = DetachedCriteria.For(typeof(table1));

            Template.Criteria.CreateCriteria("table2", "Usr", NHibernate.SqlCommand.JoinType.InnerJoin)

                 .SetProjection(Projections.ProjectionList()
                 .Add(Projections.Count("Usr.ID"), "UserCount")
                  .Add(Projections.GroupProperty("Location"), "ALocation")
                  .Add(Projections.GroupProperty("Company"), "ACompany")
                  .Add(Projections.GroupProperty("Usr.Designation"), "ADesignation"));  
Run Code Online (Sandbox Code Playgroud)

上面的查询给我数据,

Location   Company    Designation   Count
  Florida      A          Manager       3
  Florida      A          QA            5
  Texas        B          Manager       6
  Texas        B          QA            7
Run Code Online (Sandbox Code Playgroud)

有没有办法更改查询,以便它提供数据,

  Location   Company    Manager    QA               
  Florida      A           3       5
  Texas        B           6       7
Run Code Online (Sandbox Code Playgroud)

这里Manager和QA是唯一可以进入指定字段的值.

nhibernate criteria nhibernate-projections

2
推荐指数
1
解决办法
1309
查看次数

NHibernate QueryOver,Projections和Aliases

我有一个nhibernate问题,我正在投影sql Coalesce函数.

我正在比较来自两个不同实体的两个具有相同名称的字符串属性.在生成的sql中,仅比较来自第一个实体的相同属性:

var list = Projections.ProjectionList();
list.Add(
   Projections.SqlFunction("Coalesce",
    NHibernateUtil.String,
    Projections.Property<TranslatedText>(tt => tt.ItemText),
    Projections.Property<TextItem>(ti => ti.ItemText)));

var q = Session.QueryOver<TextItem>()
    .Left.JoinQueryOver(ti => ti.TranslatedItems);
Run Code Online (Sandbox Code Playgroud)

在这个sql中评估q结果

coalesce(this_.ItemText, this_.ItemText)
Run Code Online (Sandbox Code Playgroud)

this_在RHS需要有一个别名表

我可以使用, Projections.Alias(Projections.Property<TranslatedText>(tt => tt.ItemText), "ttAlias")但不知道如何映射"ttAlias" JoinQueryOver.

我也可以在那里创建一个别名,但是看不到如何命名它.

TranslatedText ttAlias = null;
...
JoinQueryOver(ti => ti.TranslatedItems, () => ttAlias)
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-projections queryover

2
推荐指数
1
解决办法
4042
查看次数