2010-04-06 3 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, CIS3G.Jcdc.EO.StudentEO s, CIS3G.Jcdc.EO.EnrollmentEO, CIS3G.Jcdc.EO.EnrollmentTypeEO et, CIS3G.Jcdc.EO.VwStaffStudentStaffEO sss, CIS3G.Jcdc .EO.VwAgeStudentEO vas WHERE (e.EnrId = et.EnrId) 및 (s.StudId = vas.StudId) AND (s.StudId = e.StudId) AND (et.EnrtypeId * = sss.EnrtypeId) AND (Isnull sss.StudStaffRoleCd, 1044 = 1044) AND (s.StudId = 4000)

분명히 n * 구문과 비슷하지만, 재 작성은 ansi sql 외부 조인과 기쁨이 아닙니다.

아무도 SQL을 변경할 수있는 ineed를 알려주므로 외부 조인을 올바르게 수행 할 수 있습니까?

감사합니다,

Eric- 당신은 명시 적으로 관련 기관을 얻기 위해 NHibernate에 조인 할 필요가 없습니다

답변

0

. 대신 이러한 관계를 many-to-one으로 매핑하십시오.

예를 들어, Student 클래스는 References(x => x.EnrollmentType) 일 수 있습니다. 이를 통해 학생을 선택하기 만하면됩니다 (ID가 알고있는 경우 HQL이 필요하지 않으며 session.Get을 사용할 수 있습니다). 그러면 다른 속성으로 이동할 수 있습니다.

는 당신이 우리가 ANSI의 SQL 작업과 약간 다르게 NHibernate에 호출받은 NHibernate documentation

+0

, 우리는 HQL을 통과 ahve 또는 SQL 직접 우리의 라이브러리를 통해 NHibernate에 테오, 그리고 맵 파일 캔트 '변경 . Tech의 헤드는 점차적으로 nhibernate로 이동하기를 원하므로 정상적인 방법으로 사용하지 않습니다. HQL을 통해이를 수행 할 수있는 방법이 있습니까? 감사합니다. Eric- –

1

을 읽을 것을 권장합니다.

antlr을 사용하여 t-sql을 허용하거나 antlr 구문 분석을 모두 중지 할 수 있습니까?

이 모든 SQL은 antlr 구문 분석을 추가 한 버전을 갖기 전에 정상적으로 작동했습니다. 많은 장소 우리가 이미 기록 된 모든 복잡한 SQL과 다른 응용 프로그램에서 이식하고 변경할 수 없기 우리가 NHibernate에로 T-SQL을 전달하고 있으며, 우리는 ANSI 표준으로 모든 SQL 재검사 &를 다시 작성하지 않으려에서

.

antql 구문 분석은 직접 SQL이 아닌 HQL에만 적용되어야합니까? 우리와 같은 다른 DB에 대한 기본 호환성을 줄일 수 있습니다.

감사합니다,

에릭 = I 인해 내 급여 등급 위의 결정에 그 afrid 해요

관련 문제