2010-04-06 44 views
0

獲得'Antlr.Runtime.NoViableAltException',所以我們升級到了更新的Nhibernate和Fluent Nhibernate。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 FROM CIS3G.Jcdc.EO.StudentEO s,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)

很明顯,它不像* =語法,我試圖重寫爲ansi sql outer join並且沒有喜悅。

任何人都可以告訴我什麼改變sql到所以我可以讓外部連接正常工作嗎?

感謝,

Eric-

回答

0

你不需要做NHibernate的明確連接,以獲得相關的實體。相反,將這些關係映射爲多對一。

例如,您的Student類可能有References(x => x.EnrollmentType)。有了這個,你只需要選擇學生(如果你知道ID,你甚至不需要HQL;你可以使用session.Get),你可以導航到其他屬性。

我建議你閱讀NHibernate documentation

+0

我afrid,由於我上面的薪酬等級決定,我們ahve通過HQL或SQL直接通過我們的圖書館NHibernate的TEO和地圖文件俊男改變。 Tech的負責人希望逐步採取行動,所以我們不會以正常方式使用它。 有沒有辦法通過HQL做到這一點? 謝謝, Eric- – 2010-04-07 14:30:05

1

我們得到了它與ANSI SQL工作,並呼籲NHibernate的略有不同。

有什麼辦法可以強制antlr允許t-sql,或停止antlr一起解析嗎?

在我們添加antlr解析的版本之前,所有這些sql都正常工作。

在許多地方,我們通過T-SQL NHibernate的,becasue我們從另一個應用程序移植了所有複雜的SQL已經寫好了,我們想避免重寫&複試所有SQL的ANSI標準。

不應該只將antrl解析應用於HQL而只是不直接使用SQL?您可以像其他DB一樣降低本地兼容性,例如我們的。

感謝,

埃裏克=