2012-10-10 84 views
0

我們使用Hibernate和IBM DB2 9.7。數據庫給出的錯誤是關於Hibernate生成的選擇語句列表過大(包括很多連接)。錯誤代碼是840.可以做些什麼來解決這個問題?我知道生成的選擇列表非常長,但是可以將Hibernate設置爲將其分割成多個部分或其他東西?IBM DB2 9.7錯誤代碼840,選擇語句列表太大

編輯:我重新打開這個,因爲問題似乎有點大。所以在https://hibernate.onjira.com/browse/ANN-140有一個JIRA問題(現在被拒絕)。

所以問題在於,使用Hibernate Annotations時,不可能通過Join策略添加鑑別器。但XML配置確實支持這一點。

帕維爾很好地指出在這樣上面的鏈接討論的問題:一個

"It would be nice to see how the problem with the multiple joins is faced when the 
underlying DB has restriction on the number of joins one can execute in a single SQL? 
For instance MySQL seems to allow only 31 joins. What happens if the class hierarchy 
has more  than 31 sub-classes?" 

上面是我有特別的問題。我們正在使用註解,並且其中的子類有很多,創建了大量的連接,這違反了DB2語句。

對此的評論?我也找不到直接的解決方案。

回答

3

Hibernate有很少的獲取策略來優化Hibernate生成的select語句,因此它可以儘可能高效。在映射關係中聲明獲取策略來定義Hibernate如何獲取其相關集合和實體。

抓取策略 有四種抓取策略

  1. fetch-」加入」 =禁用延遲加載,始終加載所有集合和實體。
  2. fetch-「select」(默認)=懶加載所有集合和實體。
  3. batch-size =「N」=獲取'N'個收藏或實體,不記錄
  4. fetch-「subselect」=將其集合分組爲一個子選擇語句。

有關詳細的解釋,你可以檢查Hibernate documentation

+0

對此的快速評論。那麼這是否意味着通過不同的策略(1-4)可以減少選擇語句的大小?請注意,我並不是在說會返回太多的行,但實際的select語句太大,列和連接太多。 – user1340582