, SaveOrUpdate() yöntemi gereksinimi karşılamak gerekir. Hibernate Session doc
geçersiz SaveOrUpdate (Object nesne) atar HibernateException Ya kaydetmek (Object) veya güncelleme kaydedilmemiş değerli çeklerin çözünürlüğe bağlı olarak (Object) Verilen örneği, (kaydedilmemiş-değerin tartışma için kılavuzuna bakın kontrol). Bu işlem, ilişkisi, cascade = "save-update" ile eşleştirilirse, ilişkilendirilmiş örneklere basamaklanır.
Parametreler: nesne - referans için bir örnek kod Gönderme yeni veya güncelleştirilmiş devlete
içeren bir geçici ya da müstakil örneği: aşağıdaki yöntemde, bir stok amacı da, yeni veri tabanına yerleştirilir.
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();
Sonra başka yöntemde yeni Oturumu açın ve sonra StockId aynı kimliği verin, eğer güncellenir ve birincil anahtar (insert veya Stok nesnesini güncellemeyi deneyin yeni bir kimliği verirsen bu ekler, burada ben
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();
}
Sadece bu durumda StockRecord) içinde (diğer bazı varlık için bir ilişki varsa, uygun CASCADE value.In bu davayı vermek emin olun) 70 olarak korumuşlardır, CascaseType ALL olarak ayarlandı.
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = false)
@JoinColumn(name = "stockId", updatable = true, insertable = true)
private Set<StockRecord> stockRecords =
new HashSet<StockRecord>(0);
Sadece şunu yapın: veritabanını sorgulayın ve nesne bulunursa, güncelleştirin, aksi halde, devam ettirin. Hazırda beklet bunu senin için yapmaz. –