Java 使用Oracle生成的SQL查询语法很旧
我正在使用Hibernate 3.2.5。当我使用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
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联接
- -不推荐使用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标准中进行正确的外部联接是可能的。顺便说一句,如果你有两个问题,你应该在这里写两篇独立的文章,而不是把它们都放在一篇文章里。我认为右连接可以通过颠倒表的顺序被左连接取代。我认为右连接可以通过颠倒表的顺序被左连接取代。