我是相對較新的休眠和尋找任何機制,只有當複合鍵不存在,否則更新它,我插入新記錄。休眠保存數據,如果不存在數據庫中更新它
我試着用saveOrUpdate方法,但似乎它只適用於會話中的對象。 我想要一些機制,應該查詢數據庫,如果數據已經存在數據庫中,然後更新記錄,否則插入它。
感謝,
愛瑪
我是相對較新的休眠和尋找任何機制,只有當複合鍵不存在,否則更新它,我插入新記錄。休眠保存數據,如果不存在數據庫中更新它
我試着用saveOrUpdate方法,但似乎它只適用於會話中的對象。 我想要一些機制,應該查詢數據庫,如果數據已經存在數據庫中,然後更新記錄,否則插入它。
感謝,
愛瑪
也在Hibernate文檔提到,saveOrUpdate()方法的方法應該可以滿足您的要求。 Hibernate Session doc
空隙saveOrUpdate(Object對象) 拋出HibernateException的要麼保存(對象)或更新(Object)將給定的實例,這取決於 未保存值檢查的分辨率(參見未保存值的討論手動 檢查)。如果 關聯映射爲cascade =「save-update」,則此操作將級聯到關聯的實例。
參數:對象 - 包含新 或更新的狀態
過帳示例代碼以供參考的瞬時或拆卸實例: 在下面的方法中的股票對象被新插入到數據庫中。
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Stock stock = new Stock();
stock.setStockId(70);
stock.setStockCode("7052");
stock.setStockName("TEST SAVE");
StockRecord stockRecords = new StockRecord();
stockyRecords.setDaily_record_id(80);
stockRecords.setPriceOpen(new Float("1.2"));
stockRecords.setPriceClose(new Float("1.1"));
stockRecords.setPriceChange(new Float("10.0"));
stockRecords.setStock(stock);
stock.getStockRecords().add(stockRecords);
session.save(stock);
session.save(stockRecords);
session.getTransaction().commit();
session.close();
然後在另一個方法,你打開一個新的會話,然後嘗試插入或更新一個股票對象(StockId是主鍵,如果你把相同的ID,它將更新,如果你給一個新的ID ,它會插入,在這裏我都保留它作爲70)
public static void testSaveOrUpdate(){
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Stock stock = new Stock();
stock.setStockId(70);
stock.setStockCode("7052");
stock.setStockName("Test SaveOrUpdate");
StockRecord stockRecords = new StockRecord();
stockRecords.setDaily_record_id(90);
stockRecords.setPriceOpen(new Float("1.3"));
stockRecords.setPriceClose(new Float("1.1"));
stockRecords.setPriceChange(new Float("10.0"));
stockRecords.setStock(stock);
stock.getStockRecords().add(stockRecords);
session.saveOrUpdate(stock);
session.getTransaction().commit();
}
只要確保,如果你有其他一些實體的關係(在這種情況下StockRecord)你給適當的CASCADE value.In這種情況下, CascaseType設置爲ALL。
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = false)
@JoinColumn(name = "stockId", updatable = true, insertable = true)
private Set<StockRecord> stockRecords =
new HashSet<StockRecord>(0);
這樣做:查詢數據庫,如果找到該對象,則更新它,否則,將其保留。休眠不會爲你做到這一點。 –