Nhibernate обновлен, получая Antlr.Runtime.NoViableAltException при внешнем соединении, используя * = - PullRequest
0 голосов
/ 07 апреля 2010

, поэтому мы обновились до более новых 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 s, CIS3G.Jcdc.O.EnrollmentEO e, CIS3G.Jcdc.EO.EnrollmentTypeEO et, CIS3G.Jcdc.EO.VwStaffStudentStaffEO sss, CIS3G.Jcdc.EO.VwAgeStudentEO vAS WHERE (e.EnrId = et.SID = EUD).И (s.StudId = e.StudId) И (et.EnrtypeId * = sss.EnrtypeId) И (Isnull (sss.StudStaffRoleCd, 1044) = 1044) И (s.StudId = 4000)

Понятно, что этоМне не нравится синтаксис * =, я попытался переписать как ANSI SQL внешнего соединения и не радости.

Может кто-нибудь сказать мне, что Ined, чтобы изменить SQL, чтобы я мог заставить работать внешнее объединение правильно?

Спасибо,

Эрик-

Ответы [ 2 ]

1 голос
/ 07 апреля 2010

Мы работаем с ANSI SQL и вызываем nhibernate немного иначе.

Есть ли способ заставить antlr разрешить t-sql или прекратить разбор antlr все вместе?

Все это sql работало нормально до того, как мы получили версию с добавленным анализом antlr.

В МНОГИХ местах мы передаем T-Sql в NHibernate, потому что мы портируем из другого приложения со всем уже написанным сложным SQl, и мы хотели бы избежать переписывания и повторного тестирования всего sql как стандарта ANSI.

Разве разбор antrl должен применяться только к HQL, а не к прямому SQL? Вы уменьшаете встроенная совместимость для других БД, таких как наша.

Спасибо

Eric =

0 голосов
/ 07 апреля 2010

Вам не нужно делать явные объединения с NHibernate, чтобы получить связанные сущности. Вместо этого сопоставьте эти отношения как многие-к-одному.

Например, ваш класс Student может иметь References(x => x.EnrollmentType). При этом вам нужно только выбрать студента (вам даже не нужен HQL, если вы знаете Id; вы можете использовать session.Get), и вы можете просто перейти к другим свойствам.

Я рекомендую вам прочитать документацию NHibernate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...