2017-05-28 43 views
0

當一個人試圖熱切負載兩袋以下異常被拋出休眠:爲什麼加載兩個袋子會生成笛卡爾產品?

org.hibernate.loader.MultipleBagFetchException:不能同時 獲取多袋

Acording以下職位:

org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags

Hibernate cannot simultaneously fetch multiple bags

Hibernate不允許提取多個包,因爲這會生成笛卡兒積。

而且這兩篇文章都推薦使用集合而不是非索引列表(袋)。

我的問題是:

爲什麼嘗試加載兩袋將產生笛卡爾積,並使用套就沒有呢?

回答

0

在這兩種情況下都會生成笛卡爾產品 - 用於包裝和套裝。使用什麼並不重要。

含義本聲明:

休眠不允許取一個以上的包,因爲這將產生一個笛卡爾乘積。

Hibernate可以使用集處理笛卡爾積的結果,不能使用包。你可以參考這裏的一個例子: Hibernate Exception - Simultaneously Fetch Multiple Bags