我想基于2个id来检索一个对象。
这是正确的标准吗?
var notes = session
.CreateCriteria(typeof(Note))
.Add(Restrictions.Eq("Product", productId))
.Add(Restrictions.Eq("User", userId))
.List<Note>();
此查询是否会获取属于用户和产品的备注?
并执行此标准:
var comments = session
.CreateCriteria(typeof(Comment))
.Add(Restrictions.Eq("Product", productId))
.Add(Restrictions.Eq("IsOwnComment", 0))
.List<Comment>();
return comments;
返回布尔值为0的产品的注释?
我做对了吗?
BR
答案 0 :(得分:2)
var notes = session
.CreateCriteria(typeof(Note))
.Add(Restrictions.Eq("Product", productId))
.Add(Restrictions.Eq("User", userId))
.List<Note>();
这不会像这样工作。您需要提供产品和用户的关联路径的完整实体。你可以做的是使用特殊的id属性:
var notes = session
.CreateCriteria(typeof(Note))
.Add(Restrictions.Eq("Product.id", productId))
.Add(Restrictions.Eq("User.id", userId))
.List<Note>();
对于第二个示例,请使用Restrictions.IsNull("IsOwnComment")
答案 1 :(得分:1)
当您使用添加Criteria的表达式而不识别它们之间的And或Or表达式时,NHibernate将默认使用And,因此您编写的critera将与这些HQL查询相同:
"from Note note where note.Product=:productId and note.User=:userId"
和
"from Comment comment where comment.Product=:productId and comment.IsOwnComment=0"
只有一点需要注意:如果产品和用户是多对一关系,这些查询将无效,您应该使用Product.Id和User.Id作为属性名称