我們使用@OneToMany
我們的父 - >兒童安全>兒童安全>兒童DB關係Hibernate的性能問題:與一對多/ null的關係
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "THE_ID", nullable = false)
private List<ChildClass> children = new ArrayList<ChildClass>();
我們有大量的數據(100K插入)這樣一個場景,插入時性能很差(實際超時)。有了少量數據(1K插入),我們很好。
因此,沒有很好的理由,我已經刪除了nullable = false
並更改了子表上的數據庫外鍵,以允許空值和暴露性能相當好。任何人都可以解釋嗎?
更新:打開了調試功能。隨着nullable = false
似乎是一個巨大的瓶頸產生的子表的ID。我們超時等待ID生成,在日誌中一遍又一遍:
[org.hibernate.event.def.AbstractSaveEventListener] [ ] generated identifier: <743088>, using strategy: org.hibernate.id.IncrementGenerator
我們甚至從來沒有將數據插入數據庫。我們只是堅持身份證。目前我們配置Hibernate通過目前在子表中尋找最大的ID值是生成ID:
@Id
@GeneratedValue(generator = "DummyString")
@GenericGenerator(name = "DummyString", strategy = "increment")
@Column(name = "THE_ID", nullable = false)
private Long id;
在此之前我們用的是DB序列,看到了同樣的問題。
當我們省略nullable = false
時,我們確實看到了這些ID生成語句(108K),但它們在25秒內完成。那麼,爲什麼這些陳述(字面意義上的)永遠帶着nullable = false
?
好點,+1 – whiskeysierra 2010-02-06 12:07:51
子實體全部被插入,從父表級聯。 – 2010-02-06 16:56:17