代码之家  ›  专栏  ›  技术社区  ›  Eric Brown - Cal

nhibernate已升级,使用在外部联接上获取“antlr.runtime.noviablealtexception”*=

  •  0
  • Eric Brown - Cal  · 技术社区  · 14 年前

    所以我们升级到新的NHibernate和流畅的NHibernate。

    现在我有个例外: failednhibernate.hql.ast.antlr.querysyntaxception:引发了类型为“antlr.runtime.noviablealtexception”的异常。459列1号线附近

    在这个hql上,在升级之前运行良好。

    从cis3g.jcdc.eo.studenteo s、cis3g.jcdc.eo.studenteo.eo.enrollmenteo e、cis3g.jcdc.eo.studenteo et、cis3g.jcdc.eo.vwstaffstudentes选择s.studid、s.studlname、s.dob、et.enrtypeid、et.active、et.enrid、sss.staffname、sss.stafffname、sss.staffmi、vas.currentage。塔夫绸SSS,cis3g.jcdc.eo.vwagestudenteo vas,其中(e.enrid=et.enrid)和(s.studid=vas.studid)和(s.studid=e.studid)和(et.enrtypeid*=sss.enrtypeid)和(isnull(sss.studstaffrolecd,1044)=1044)和(s.studid=4000)

    显然它不喜欢*=语法,我试着重写为ansi sql外部连接,没有乐趣。

    有谁能告诉我需要将sql更改为什么以便让外部连接正常工作吗?

    谢谢,

    埃里克-

    2 回复  |  直到 14 年前
        1
  •  1
  •   Eric Brown - Cal    14 年前

    我们让它与ansi sql一起工作,调用nhibernate略有不同。

    有什么方法可以强制antlr允许t-sql,或者同时停止antlr解析吗?

    在我们得到添加antlr解析的版本之前,所有这些sql都工作得很好。

    在许多地方,我们将t-sql传递给nhibernate,因为我们从另一个已经编写了所有复杂sql的应用程序进行移植,我们希望避免将所有sql重新编写为ansi标准。

    难道antrl解析不应该只应用于hql而不是直接sql吗?你减少了 与其他数据库的本地兼容性,如我们的数据库。

    谢谢,

    埃里克=

        2
  •  0
  •   Diego Mijelshon    14 年前

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

    例如,您的 Student 班级可以有一个 References(x => x.EnrollmentType) . 这样,您只需要选择学生(如果您知道id,甚至不需要hql;您可以使用 session.Get )你可以导航到其他属性。

    我建议你读一下 NHibernate documentation