我成功配置Hibernate以使用批量查詢來創建/更新對象,但是有一種情況尚未運行。有多個ManyToMany關係的Hibernate批處理事務
我有3個實體: - 主要實體 - 實體A - 實體B
主要實體有兩個實體A和實體B.主要實體多對多關係是關係的擁有者:
@ManyToMany
@JoinTable(name = "MAIN_A", joinColumns = {
@JoinColumn(name = "MAIN_UID", nullable = false, updatable = false) }, inverseJoinColumns = {
@JoinColumn(name = "A_UID", nullable = false, updatable = false) })
private Set<EntityA> entitiesA = new HashSet<>(0);
@ManyToMany
@JoinTable(name = "MAIN_B", joinColumns = {
@JoinColumn(name = "MAIN_UID", nullable = false, updatable = false) }, inverseJoinColumns = {
@JoinColumn(name = "B_UID", nullable = false, updatable = false) })
private Set<EntityB> entitiesB = new HashSet<>(0);
我寫了一個3個簡單的測試。 首先,我在數據庫中創建了一些實體A和實體B行(這與所有2個測試用例共同)。
第一種情形:爲所有的主要實體和MAIN_A表條目只有一個插件: 創建n個主要實體和每個只有實體A
結果設置。所以在這種情況下浴槽插入工作正常。
第二種情況: 創建n個主要實體和每個只設置實體B
結果:只有一個插入的主要實體和MAIN_B表中的所有條目。所以在這種情況下浴槽插入工作正常。
第三種情況: 創建n個主要實體併爲每個都設置實體A和實體B
結果:只有一個插入的所有主要實體和ñ插入兩個MAIN A和MAIN_B表條目。在這種情況下批量插入不起作用。我Google搜索,但我找不到答案。
有沒有人知道它爲什麼沒有按預期在第三種情況下工作?我做錯了什麼?配置中是否有解決我需求的任何問題?
的3個場景的代碼是非常簡單的:
Set<EntityA> setA;
Set<EntityB> setB;
for (long i = 1; i < n; i++) {
MainEntity e = new MainEntity();
ac.setEntitiesA(setA); //this is commented in the second scenario
ac.setEntitiesB(setB); // this is commented in the first scenario
session.save(e);
}
我張貼在休眠論壇相同qestion:Hibernate Forum post
您可以添加用於執行第三種情況的代碼嗎? –
@MaciejKowalski我剛剛更新了代碼 – Simone