0

Hibernate3.2.5を使用しています。Aを使用するJOINと、Hibernateによって生成されたSQLクエリがOracle9iリリースより前の構文であることがわかります。LEFT OUTER JOINクエリには、使用するのではなく、などを示す(+)記号がLEFT OUTER JOIN付いています。

この基準の場合:

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)クエリの構文が古いのはなぜですか?Hibernate 4.0または最新のものを使用する場合、新しい構文のSQLクエリが生成されますか?

2)Outer Joinこの場合の実行方法は?のオプションは表示されますがLEFT JOINFULL JOIN何も表示されませんRIGHT JOIN

編集

Q. 2タイプミスでした、RIGHT JOIN

これらについて教えてください。

よろしく、

4

2 に答える 2

3

現在のHibernateソースコードを見ると、OracleにはさまざまなSQLダイアレクトがあることがわかります。

  • 8--8iを優先して非推奨
  • 8i-(+)構文を生成します
  • 9-9iまたは10gのいずれかを優先して非推奨
  • 9i-構文を生成(+)し、コメントを付けて「ANSI結合構文」を使用しないように指定します。これは、9iがすべての場合に適切に処理するわけではないためです。
  • 10g -ANSI結合を生成します

したがって、ANSI結合構文を取得する唯一の方法は、10g方言を使用することです。それが3.2.5に存在したのか、存在したのか、そのバージョンがANSI結合を生成するのかどうかはわかりませんが、試すことができるのはそれだけです。

于 2012-11-17T10:32:50.007 に答える
0

Ad 2)「左結合」と「完全結合」(そして、私が推測するように「右結合」)オプションがある場合は、外部結合を実行できます。これらは、外部結合の3つの既存のタイプです。「純粋な」外部結合のようなものはありません。

于 2012-11-17T12:22:12.997 に答える