Hazırda Beklet Hata: org.Hazırda Beklet.NonUniqueObjectException: aynı tanımlayıcı değeri ile farklı bir nesne zaten oturum ile ilişkili olduğu
Nesne kullanarak kurtarmaya çalışırken iki kullanıcı Nesneleri ve ben
session.save(userObj);
Aşağıdaki hatayı alıyorum:
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
[com.pojo.rtrequests.User#com.pojo.rtrequests.User@d079b40b]
Oturumu kullanarak yaratıyorum
BaseHibernateDAO dao = new BaseHibernateDAO();
rtsession = dao.getSession(userData.getRegion(),
BaseHibernateDAO.RTREQUESTS_DATABASE_NAME);
rttrans = rtsession.beginTransaction();
rttrans.begin();
rtsession.save(userObj1);
rtsession.save(userObj2);
rtsession.flush();
rttrans.commit();
rtsession.close(); // in finally block
Ben de kaydetmeden önce session.clear()
hiç şans hala yapmaya çalıştı.
Bu oturum kullanıcı isteği geldiğinde nesne alıyorum ilk kez, bir nesne oturumda mevcut olduğunu söyleyerek neden alıyorum bu yüzden.
Herhangi bir öneriniz var mı?
CEVAP
Bu hatayı birçok kez yaşadım ve çok zor takip etmesi olabilir...
Temelde, hazırda ne söylediğini aynı tanımlayıcı (aynı birincil anahtar) olan iki nesne var, ama aynı nesne değildir.
Sen geri gelene kadar hata gidene kadar kodunuzu, yani açıklama bit yıkmak ve sonra kodu koy öneririm ve hatayı bulmak gerekir.
Bunun en sık ve B nesne arasında tasarruf bir çağlayan var, ama nesne B zaten B aynı örnek üzerinde oturum ile ilişkili olduğu kaydeder geçişli) olur
Ne birincil anahtar jeneratör kullanıyor musunuz?
Bunu sormamın sebebi hazırda bir nesne (yani ister bir nesne kalıcı ya da değil) kalıcı durumunu tespit etmek için söylüyorsun nasıl ile ilgili bu hata. Hata zaten kalıcı olduğunu hazırda devam etmektedir ve nesne için çalışıyor çünkü oluyor olabilir. Eğer kaydetmek kullanırsanız aslında, hazırda çalışın ve o nesneyi devam edecek, ve belki de zaten aynı birincil anahtar, oturum ile ilişkili olan bir nesne var.
Örnek
Hazırda bir sınıf olduğunu varsayarsak 10 satır birincil anahtar kombinasyonuna göre (sütun 1 ve sütun 2) ile bir tablo için nesne. Şimdi, zaman bir noktada Tablo 5 satır kaldırdık. Hazırda bekleme veritabanı nesneleri kalıcı olması için çalışır, 5 iken, aynı 10 satır daha eklemek için çalışırsanız, zaten kaldırılmış olan satırları hatasız olarak eklenecektir. Şimdi zaten mevcut olan, kalan 5 satır bu özel durum oluşturur.
Çok kolay yaklaşımının bir parçası ve daha sonra aynı nesneleri tekrar eklemeye çalışıyoruz eğer bir tablo içinde herhangi bir değer kaldırıldı/güncelleme varsa kontrol olurdu
Hazırda Beklet: oturum arasındaki Fark...
'JPA arasındaki fark ne ve Hazırd...
Hazırda Beklet: Kriterleri vs HQL...
Hazırda Beklet: hbm2ddl.otomatik=üreti...
Çapraz alan Hazırda Beklet Doğrulayıcı...