SORU
2 Temmuz 2009, PERŞEMBE


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
2 Temmuz 2009, PERŞEMBE


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caina Mondo Zine

    Caina Mondo

    13 EKİM 2007
  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • FILIPeeeK

    FILIPeeeK

    22 Mayıs 2006