我正在處理導入功能,其中我必須從文件導入數據並使用休眠將其更新到數據庫。休眠不保持堅持順序
對象結構是:有一個父對象,它有一組子對象。
當我進行導入時,我首先刪除所有現有的孩子,然後添加我從文件中讀取的新孩子。
我做到這一點的方法是如下
parent = session.load(<id of parent>)
parent.getchildrenSet.clear()
parent.saveOrUpdate(parent);
然後,在一個循環中創建新的兒童,並將其添加到childrenSet父。然後
parent.saveOrUpdate(parent);
映射情況如下
在家長
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "CHILD_TABLE", joinColumns = { @JoinColumn(name = "CHILD_PARENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "CHILD_ID") })
@MapKeyColumn(name = "CHILD_ID")
private Map<Long, Children> childrenMap;
在兒童
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "CHILD_PARENT_ID")
private Parent parent;
當我運行這段代碼我預期的日誌打印的DML中以下訂單
1.刪除所有的孩子
2.插入新的兒童
3.更新父
但它打印的是
1.插入新的兒童
2.更新父
3。刪除所有的孩子
因此,作爲上述命令的結果,它將從父母中刪除所有孩子,甚至是因爲導入而新增的孩子。
看起來好像hibernate不會維護我調用DML的順序。任何人都可以提供一些建議嗎?如果問題不明確,請告知我。
您可以嘗試在[session.flush()](http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html#flush%28%29)之後執行第一個saveOrUpdate()? – Pablo
我介紹了其他來源,發現不建議使用session.flush。 – shashikanthb
同花順是不好的風格。你的映射怎麼看? –