我有兩個具有多對多關(guān)系的實體。@Entity@Table(name = "KATEGORIA_CENOWA_WODA_SCIEKI")public class KategoriaCenowaWodaScieki extends BaseEntity { private static final long serialVersionUID = -113600254855102844L; @EqualsAndHashCode.Exclude @ManyToMany(mappedBy = "kategoriaCenowaList") private Set<KatalogSubstancjiWodaScieki> katalogSubstancjiList = new HashSet<>();和@Entity@Table(name = "KATALOG_SUBSTANCJI_WODA_SCIEKI")public class KatalogSubstancjiWodaScieki extends BaseEntity { private Integer kodSubstancji; @Column(nullable = false) private String nazwaSubstancji; @EqualsAndHashCode.Exclude @ManyToMany @JoinTable(name = "KATALOG_SUBSTANCJI_WODA_SCIEKI_KATEGORIA_CENOWA_WODA_SCIEKI", joinColumns = { @JoinColumn(name = "KATALOG_SUBSTANCJI_ID")}, inverseJoinColumns = { @JoinColumn(name = "KATEGORIA_CENOWA_ID")}) private Set<KategoriaCenowaWodaScieki> kategoriaCenowaList = new HashSet<>();我創(chuàng)建了一個帶有一個連接的查詢@Query("select s.kategoriaCenowaList from KatalogSubstancjiWodaScieki s " + "inner join s.kategoriaCenowaList c " + " where s = :katalogSubstancji " ) Optional<KategoriaCenowaWodaScieki> findByKatalogSubstancjiAndOkresObowiazywaniaAndKatalogRZGW( KatalogSubstancjiWodaScieki katalogSubstancji);我不明白為什么生成的 SQL 包含兩個物理連接。也許有人可以解釋一下?select kategoriac4_.ID as ID1_46_, kategoriac4_.CREATED as CREATED2_46_, kategoriac4_.UPDATED as UPDATED3_46_, kategoriac4_.KATALOG_RZGW_ID as KATALOG_9_46_, kategoriac4_.kod as kod4_46_, kategoriac4_.nazwa as nazwa5_46_, kategoriac4_.dataDo as dataDo6_46_, kategoriac4_.dataOd as dataOd7_46_, kategoriac4_.stawka as stawka8_46_from KATALOG_SUBSTANCJI_WODA_SCIEKI katalogsub0_ inner join KATALOG_SUBSTANCJI_WODA_SCIEKI_KATEGORIA_CENOWA_WODA_SCIEKI kategoriac1_ on katalogsub0_.ID=kategoriac1_.KATALOG_SUBSTANCJI_ID inner join KATEGORIA_CENOWA_WODA_SCIEKI kategoriac2_ on kategoriac1_.KATEGORIA_CENOWA_ID=kategoriac2_.ID
1 回答

MMMHUHU
TA貢獻1834條經(jīng)驗 獲得超8個贊
因為@ManyToMany
. 該注釋僅適用于 2 個連接,就像在 SQL 中一樣。
如果沒有 2 個聯(lián)接,則無法查詢Many-To-Many
關(guān)系中的數(shù)據(jù)。第一個連接轉(zhuǎn)到連接表,該表保存對 2 個基表的引用以及您要連接的實際數(shù)據(jù)。然后第二個連接查詢第二個表中的實際數(shù)據(jù)。
KATALOG_SUBSTANCJI_WODA_SCIEKI
是基表。然后,您加入 KATALOG_SUBSTANCJI_WODA_SCIEKI_KATEGORIA_CENOWA_WODA_SCIEKI
其中保存實體之間的引用,然后KATEGORIA_CENOWA_WODA_SCIEKI
保存第二組實際數(shù)據(jù)。
即使您沒有加入查詢,hibernate 也應(yīng)該執(zhí)行這兩個連接來完全加載實體。
添加回答
舉報
0/150
提交
取消