Java 使用Oracle生成的SQL查询语法很旧

Java 使用Oracle生成的SQL查询语法很旧,java,oracle,hibernate,Java,Oracle,Hibernate,我正在使用Hibernate 3.2.5。当我使用JOIN时,我可以看到Hibernate生成的sql查询是Oracle 9i发布之前的语法。查询使用(+)符号表示左外部联接,而不是使用左外部联接等等 对于这一标准: Criteria criteria = session.createCriteria(Dept.class).createAlias("empMap","id",CriteriaSpecification.LEFT_JOIN).add(Restrictions.eq("deptId

我正在使用Hibernate 3.2.5。当我使用
JOIN
时,我可以看到Hibernate生成的sql查询是Oracle 9i发布之前的语法。查询使用(+)符号表示
左外部联接
,而不是使用
左外部联接
等等

对于这一标准:

Criteria criteria = session.createCriteria(Dept.class).createAlias("empMap","id",CriteriaSpecification.LEFT_JOIN).add(Restrictions.eq("deptId", new Integer(6)));
这是生成的SQL查询:

select this_.DEPT_ID as DEPT1_1_1_, this_.DEPT_NAME as DEPT2_1_1_, id1_.DEPT_ID as DEPT2_3_, id1_.EMP_ID as EMP1_3_, id1_.EMP_ID as formula0_3_, id1_.EMP_ID as EMP1_0_0_, id1_.DEPT_ID as DEPT2_0_0_, id1_.EMP_NAME as EMP3_0_0_, id1_.AGE as AGE0_0_, id1_.SEX as SEX0_0_ from dept this_, emp id1_ where this_.DEPT_ID=id1_.DEPT_ID(+) and this_.DEPT_ID=?
我的问题是:

1) 为什么查询有旧语法?如果我使用Hibernate4.0或最新版本,那么它会生成新的语法SQL查询吗

2) 在这种情况下如何执行
外部联接
?我可以看到
左连接
完全连接
的选项,但看不到
右连接

编辑

问题2.这是一个打字错误,它的
右连接

请让我知道这些

关于,

如果您查看,您将看到Oracle有许多不同的功能:

  • -不推荐使用8i
  • -生成
    (+)
    语法
  • -不推荐使用9i或10g
  • -生成
    (+)
    语法,注释指定不使用“ANSI连接语法”,因为9i似乎无法在所有情况下正确处理它
  • -生成ANSI联接
因此,获取ANSI连接语法的唯一方法是使用10g方言。我不知道3.2.5中是否存在这种情况,或者它是否存在,它的版本是否会生成ANSI联接,但这是唯一可以尝试的方法。

如果您查看,您会发现Oracle有许多不同的功能:

  • -不推荐使用8i
  • -生成
    (+)
    语法
  • -不推荐使用9i或10g
  • -生成
    (+)
    语法,注释指定不使用“ANSI连接语法”,因为9i似乎无法在所有情况下正确处理它
  • -生成ANSI联接

因此,获取ANSI连接语法的唯一方法是使用10g方言。我不知道3.2.5中是否存在这种情况,或者它是否存在,那里的版本是否会生成ANSI连接,但这是唯一可以尝试的方法。

ad2)如果您有“左连接”和“全连接”(我猜是“右连接”)选项,那么您可以执行外部连接。这是现有的三种外部联接类型。没有所谓的“纯”外部联接。

ad2)如果您有“左联接”和“完全联接”(我猜还有“右联接”)选项,那么您可以执行外部联接。这是现有的三种外部联接类型。没有所谓的“纯”外部联接。

您使用的是哪种Oracle方言?DB是Oracle 10g,cfg文件中的方言:
org.hibernate.dialent.oraclealent
您应该使用
oracle10galent
。看汤姆·安德森的回答谢谢,我知道了。第二个问题是什么?如何实现正确的连接?请让我知道。您使用的是哪种Oracle方言?DB是Oracle 10g,cfg文件中的方言:
org.hibernate.dialent.oraclealent
您应该使用
oracle10g方言
。看汤姆·安德森的回答谢谢,我知道了。第二个问题是什么?如何实现正确的连接?请让我知道。非常感谢!它解决了我的第一个问题。您能提供一些关于第二个Q的输入吗?遗憾的是,我不相信在Hibernate或JPA标准中进行正确的外部联接是可能的。顺便说一句,如果你有两个问题,你应该在这里写两篇独立的帖子,而不是把它们都放在一个帖子里。非常感谢!它解决了我的第一个问题。您能提供一些关于第二个Q的输入吗?遗憾的是,我不相信在Hibernate或JPA标准中进行正确的外部联接是可能的。顺便说一句,如果你有两个问题,你应该在这里写两篇独立的文章,而不是把它们都放在一篇文章里。我认为右连接可以通过颠倒表的顺序被左连接取代。我认为右连接可以通过颠倒表的顺序被左连接取代。