为什么这个查询不起作用它总是返回一个空列表(映射是可以的,我确定数据库有数据!)任何想法?
var ids = //IList<int> of ids
var result = _session.CreateCriteria(typeof (User))
.Add(Restrictions.InG("Id", ids))
.CreateCriteria("Posts")
.AddOrder(Order.Asc("CreatedOn"))
.SetMaxResults(20)
.List<Post>();
答案 0 :(得分:5)
尝试使用类似的东西:
List<User> users = _session.CreateQuery("FROM User ORDER BY CreatedOn").List<User>().Where(u => ids.Contains(u.Id));
var posts = new List<Post>();
foreach(User user in users) {
posts.AddRange(user.Posts);
}
我想这取决于你的用户已经拥有Posts集合,但大多数hibernate实现应该有类似的东西。
你也可以这样压缩它:
List<Post> posts = _session.CreateQuery("FROM Post ORDER BY CreatedOn").List<Post>().Where(p => ids.Contains(p.User.Id));
或第三种选择:
List<Post> posts = _session.CreateQuery("FROM Post ORDER BY CreatedOn WHERE User.Id IN (" + ids.ToArray().Join(",") + ")").List<Post>();
答案 1 :(得分:-2)
我刚刚使用HQL而不是标准api:
var result = _session.CreateQuery("from Post p order by p.CreatedOn where p.PostedBy.Id IN (" + sb + ")").List<Post>();
一切正常:)