2010-09-21 91 views
2

我有一個非常大的對象樹結構,我堅持使用Hibernate。這應該先保留在根節點,然後是孩子等。然而,這不是Hibernate所做的方式,它首先堅持孩子,並且在父母被持續時更新孩子中的參考列。這不是一個最佳的方式,所以我強制一對多(JoinColum)不爲null(空值= false)。一對多的休眠持久性很慢

現在事實證明,一切都變得更慢,速度要慢得多。我不明白?!

+0

我不認爲有足夠的細節得到任何答案。 – 2010-09-21 17:11:47

+0

我知道細節水平很低。然而,我還沒有那麼多,並正在努力。因此,如果我在所有「一對多」和「多對一」關係中都有「可空=假」,則持續時間爲30分鐘。如果我刪除了限制但具有相同的數據,則需要40秒。我還可以補充說,我的對象圖中沒有循環依賴關係,它是一棵樹(關於具有「cascada」的關係)。 – 2010-09-22 12:30:03

+0

該問題與Hibernate插入和更新的方式有關。當使用「nullable = true」(或者什麼也沒有)時,Hibernate會跳過插入的外鍵列,然後用更新語句更新它。但是,如果「nullable = false」,則外鍵將插入到插入中,但值不正確,然後由更新語句更新?!這是非常低效的,而且我真的很想解決這個問題(爲什麼PostgreSQL上的這種差異是我仍然不明白的?)。 – 2010-09-22 13:13:28

回答

1

如果是雙向關聯,則需要將一端映射爲反轉(如果使用註釋,則將xml中的反轉屬性映射到mappedBy)。