PostgreSQL与LIKE和参数的NHibernate问题

时间:2009-09-21 08:17:38

标签: nhibernate postgresql

我遇到PostgeSQL和NHibernate的问题。我已经尝试过HQL和Criteria并选择不返回任何内容。我使用log4net来获取生成的查询,用值替换参数并查询返回结果,为什么呢? Postgre或NHibernate有特殊的配置吗?我甚至尝试降低(较低(列),如较低(:param)),没有结果。

HQL : return sess.CreateQuery("from VersFile e where e.ConfigId = :confId and lower(e.FolderPath) like lower(:path) and e.Type = :type and e.Statuss = :statuss and e.Tester != '' order by e.Sequence asc").SetString("path",path).SetInt32("type", fileType).SetInt32("confId", configId).SetInt32("statuss", recordStatuss).List<VersFile>();

FolderPath是字符变化列

OR标准

return sess.CreateCriteria(typeof(VersFile)).Add(Expression.Eq("Type", fileType)).Add(Expression.Eq("Statuss", recordStatuss)).Add(Expression.Eq("ConfigId", configId)).Add(Expression.Like("FolderPath", path, MatchMode.Start)).Add(Expression.Not(Expression.Eq("Tester", ""))).Add(Expression.Not(Expression.Eq("Statuss", (int)RecordStatuss.Merged))).AddOrder(Order.Asc("Sequence")).List<VersFile>();

生成的查询看起来像

select .... from versfile versfile0_ where ( versfile0_.statuss!=99) and versfile0_.confId=:p0 and (lower(versfile0_.fpath) like lower(:p1)) order by versfile0_.sequen asc;:p0 = 1, :p1 = '\%MainVss\%WinGui\%'

我从查询字符串中删除了无用的参数

1 个答案:

答案 0 :(得分:1)

实际上,'\%MainVss\%WinGui\%'在现代postgreses中并不完全有效。它是E'\%MainVss\%WinGui\%'或'%MainVss%WinGui%'。这相当于'%MainVss%WinGui%',这不一定是你想要的。