2016-04-04 19 views
0

Hazırda bekletme ve yeni kayıt eklediğim herhangi bir mekanizmayı yalnızca bileşik anahtar mevcut değilse ve başka bir şekilde güncelleştirmek için yeni görüyorum.Hazırda DB'de yoksa verileri kaydetme Hazırda bekletme

SaveOrUpdate yöntemiyle denedim, ancak yalnızca oturumdaki nesneler için çalışıyor gibi görünüyor. Veritabanında sorgulanması gereken bir mekanizma istiyorum ve eğer veri zaten veritabanında mevcutsa, o zaman kaydı başka bir şekilde güncelleyin.

sayesinde

Amandeep hazırda dokümanlarında belirtildiği gibi

+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. –

cevap

0

, 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); 
İlgili konular