我在 JPA 中有一個(gè)非常標(biāo)準(zhǔn)的 @OneToMany 映射,沒有級(jí)聯(lián)(默認(rèn)設(shè)置),如下所示:@JoinColumn(name = "PARENT_ID")@OneToMany(fetch = FetchType.LAZY)@OrderBy("date")private List<ItemRow> items;我的問題是,當(dāng)我嘗試 em.merge() 這個(gè)實(shí)體時(shí),Hibernate 認(rèn)為如果集合中不存在一個(gè)項(xiàng)目,它應(yīng)該從數(shù)據(jù)庫(kù)中刪除。鑒于我沒有顯式調(diào)用 em.remove(),生成的 SQL 并沒有真正嘗試刪除項(xiàng)目SET PARENT_ID = NULL,幸運(yùn)的是,Hibernate 只是嘗試執(zhí)行由于數(shù)據(jù)庫(kù)約束而失敗的操作。我不想加載所有項(xiàng)目只是為了將它們的父項(xiàng)保存到數(shù)據(jù)庫(kù)中。那將是愚蠢的。我的用戶界面是分頁的,當(dāng)客戶端發(fā)送部分集合時(shí),這并不意味著其他項(xiàng)目應(yīng)該被刪除,我只想插入和更新用戶看到的行,并留下未列出的行。我該怎么辦?我應(yīng)該從父實(shí)體中刪除集合映射嗎?是否有“無級(jí)聯(lián),真的,僅用于加載”的設(shè)置?我正在使用 JBoss EAP 6.4,其中包含 Hibernate 4.2.18。
1 回答

守著一只汪
TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
閱讀評(píng)論后,我決定使用普通 JDBC 保存父實(shí)體,以便我可以準(zhǔn)確控制發(fā)生的情況。生成的代碼有點(diǎn)乏味,但一旦仔細(xì)編寫,它就足夠健壯了。
插入或更新父實(shí)體后,我可以遍歷所有子實(shí)體并使用 JPA 一一保存它們。那部分工作正常。
我希望這可以更加自動(dòng)化,但是擁有與將要保存的內(nèi)容不完全對(duì)應(yīng)的內(nèi)存中集合似乎是一種不受支持的操作。
添加回答
舉報(bào)
0/150
提交
取消