作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在为即将到来的项目评估 NHibernate,并通过一些用例来了解它的性能。我尚未找到使用 Criteri API 表达以下查询的方法。
两个相当基本的表格(为了本示例的目的而进行了删减)
CREATE TABLE Person
(
PersonNo INT,
BirthDate DATETIME
)
CREATE TABLE PersonDetails
(
PersonNo INT,
FirstName VARCHAR(30),
Surname VARCHAR(30)
)
还有查询...
SELECT P.PersonNo, P.FirstName, P.Surname
FROM Persons P
JOIN PersonDetails PD
ON PD.PersonNo = P.PersonNo
AND EffDate =
(
SELECT MAX(EffDate)
FROM PersonDetails
WHERE PersonNo = PD.PersonNo
)
WHERE P.PersonNo = 1
基本上,我只是想将人员主记录和最新人员修订记录扁平化为一个对象。我可以使用 HQL 轻松完成此操作,但无法使相关子查询正常工作。
这是我的尝试。
var pdSub = DetachedCriteria.For<PersonRevision>("pdSub")
.SetProjection(
Projections.ProjectionList()
.Add(Projections.Max("EffDate").As("MaxEffDate"))
.Add(Projections.Property("Person.PersonNo").As("PersonNo"))
.Add(Projections.GroupProperty("Person.PersonNo")))
.Add(Expression.EqProperty("pdSub.Person.PersonNo", "p.PersonNo"));
var p =
session.CreateCriteria<Person>("p")
.Add(Restrictions.Eq("p.PersonNo", 1))
.Add(Subqueries.Eq("p.PersonNo", pdSub))
.List();
子查询 pdSub 已经定义了关系(通过 PersonNo),但是 Subqueries 类需要定义另一个关系(例如 Eq)?
如有任何帮助,我们将不胜感激。
谢谢,约翰
最佳答案
出于演示目的,我已将 EffDate 添加到两个表中。希望这与您的模型相匹配并适本地演示了这种连接。
DetachedCriteria subQuery = DetachedCriteria
.For<PersonDetails>("pd")
.SetProjection(Projections.Max("pd.EffDate"))
.Add(Restrictions.EqProperty("pd.PersonId", "p.PersonId"));
IList results = Session
.CreateCriteria(typeof(Person), "p")
.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("p.PersonId").As("PersonId"))
.Add(Projections.Property("p.EffDate").As("MaxEffDate")))
.Add(Subqueries.PropertyEq("p.EffDate", subQuery))
.List();
NHibernate 向服务器抛出的 SQL 看起来像这样......
SELECT this_.PersonId as y0_, this_.EffDate as y1_ FROM Person this_ WHERE this_.EffDate = (SELECT max(this_0_.EffDate) as y0_ FROM PersonDetails this_0_ WHERE this_0_.PersonId = this_.PersonId)
关于使用 ICriteria 的 NHibernate 相关子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010897/
现在我正在尝试实现 flash programming specification对于 PIC32MX。我正在使用 PIC32MX512L 和 PIC32MX512H。 PIC32MX512L最终必须
我是一名优秀的程序员,十分优秀!