Nhibernate升级使用* =在外连接上获取'Antlr.Runtime.NoViableAltException'

时间:2010-04-06 22:57:41

标签: nhibernate fluent-nhibernate

所以我们升级到更新的Nhibernate和Fluent Nhibernate。

现在我得到了这个例外: FailedNHibernate.Hql.Ast.ANTLR.QuerySyntaxException:抛出了类型'Antlr.Runtime.NoViableAltException'的异常。靠近第1行,第459行

在这个hql上,在升级之前工作正常。

SELECT s.StudId,s.StudLname,s.StudFname,s.StudMi,s.Ssn,s.Sex,s.Dob,et.EnrtypeId,et.Active,et.EnrId,sss.StaffLname,sss。 StaffFname,sss.StaffMi,vas.CurrentAge来自CIS3G.Jcdc.EO.StudentEO,CIS3G.Jcdc.EO.EnrollmentEO e,CIS3G.Jcdc.EO.EnrollmentTypeEO et,CIS3G.Jcdc.EO.VwStaffStudentStaffEO sss,CIS3G.Jcdc。 EO.VwAgeStudentEO vas WHERE(e.EnrId = et.EnrId)AND(s.StudId = vas.StudId)AND(s.StudId = e.StudId)AND(et.EnrtypeId * = sss.EnrtypeId)AND(Isnull(sss) .StudStaffRoleCd,1044)= 1044)AND(s.StudId = 4000)

显然它确实不喜欢* =语法,我试过rewritign就像ansi sql外连接而没有快乐。

任何人都可以告诉我改变sql的内容,以便我可以让外连接正常工作吗?

谢谢,

埃里克 -

2 个答案:

答案 0 :(得分:1)

我们使用ansi sql并且稍微改变地调用nhibernate。

有没有办法强制antlr允许t-sql,或者一起停止antlr解析?

在我们获得添加了antlr解析的版本之前,所有这些sql都运行正常。

在很多地方我们都将T-Sql传递给了NHibernate,因为我们正在从另一个应用程序移植到所有已编写的复杂SQl,我们希望避免重写&重新测试所有的sql作为ansi标准。

不应该只将antrl解析应用于HQL而不是直接使用SQL吗?你减少了 其他数据库的原生兼容性,如我们的。

谢谢,

埃里克=

答案 1 :(得分:0)

您不需要与NHibernate进行显式连接以获取相关实体。相反,将这些关系映射为多对一。

例如,您的Student课程可能有References(x => x.EnrollmentType)。有了这个,你只需要选择学生(如果你知道Id,你甚至不需要HQL;你可以使用session.Get),你可以只导航到其他属性。

我建议您阅读NHibernate documentation