我无法理解为什么不创建这个简单的查询。我从一个测试中调用了这个方法,它抛出一个异常抱怨第1行,第7列,我看不出有什么不对。
public IList<Continent> GetContinentByName(string name)
{
ISession session = GetSession();
IQuery query =
session.CreateQuery("select from Continent where Continent.ContinentShort='Atlantis'");
// (........) Next step will be getting the list from the query if I can make it work
我在
下面获得了antlr例外TestCase'M:DataAccessLayer.HibernateDataProvider.GetContinentByName(System.String)' 失败:抛出了类型'Antlr.Runtime.NoViableAltException'的异常。靠近第1行第7列 NHibernate.Hql.Ast.ANTLR.QuerySyntaxException:抛出了类型'Antlr.Runtime.NoViableAltException'的异常。靠近第1行第7列
有什么建议吗?
由于
答案 0 :(得分:6)
session.CreateQuery驱逐HQL查询,如下所示:
sess.CreateQuery("from DomesticCat cat where cat.Name in (:namesList)");
如果您尝试推送本机SQL查询,则必须执行以下操作:
session.CreateSQLQuery("SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10", "cat", typeof(Cat))
然而,这不是使用NHibernate的好方法。
有关详细信息,请参阅Nhibernate文档:http://nhibernate.info/doc/nh/en/index.html#manipulatingdata-querying
答案 1 :(得分:1)
我认为它期望您提供完整实体名称的别名。尝试:
IQuery query = session.CreateQuery("from Continent c where c.ContinentShort='Atlantis'");
如果这不能解决问题,请显示Continent的映射。
答案 2 :(得分:0)
O.K。
问题是开头的'选择'。似乎它在我使用的版本中无效。 所以,一旦我在开始时删除了“选择”,它就运行良好!