Şu anda bir projede Hazırda Beklet özelliğini kullanıyorum ve Çoktan Çok ilişkisi kurma konusunda sorun yaşıyorum. Sorunumun Cascade türleri ile ilgili olduğunu düşünüyorum.Birçok çağlayan türü sorunu için hazırda bekletme
Bu senaryoda bir reklam var ve her reklamda çok sayıda etiket olabilir, ancak her etiket birçok reklamla ilişkilendirilebilir.
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH })
@JoinTable(name = "adMediaAdvertiserTag",
joinColumns = { @JoinColumn(name = "adMediaId") },
inverseJoinColumns = { @JoinColumn(name = "advertiserTagId") })
Ve etiket varlık üzerinde ManyToMany haritalama geçerli:: reklam varlığın ManyToMany şerhleridir ben kaskad türleri ve eğer yapılandırmasına bağlı olarak iki farklı hataları görüyorum
@ManyToMany(mappedBy = "advertiserTags", fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
etiketi veritabanında zaten var.
reklam üzerinde kaskad tipi içermiyorsa
PERSIST ve etiket zaten o zaman bu durum almak yok:TransientObjectException: object references an unsaved transient instance
Ve reklam üzerinde kaskad tipi dahil yoksa PERSIST ve etiketi zaten aldığımız mevcut mu: Bu çalışma yok edilir alabilirsiniz
PersistentObjectException: detached entity passed to persist
tek yolu, her etiket üzerinden bir çağlayan türü ancak döngü gibi PERSIST ve oturuma kaydedin.
Bu doğru yaklaşım mı? Hazırda bekletmenin otomatik olarak halledebileceği bir yolu var mı? Bu açık değilse veya daha fazla bilgiye ihtiyacınız varsa bildirin.
GÜNCELLEME
Kurtarmam yöntemini Spring Framework ait CrudRepository nesneyi kullanan bir hizmeti kullanarak nesneleri kurtarıyorum. Çok fazla kod var, bu yüzden hepsini gönderemiyorum.
Şu anda kaydetmeye çalıştığım herhangi bir nesne için birleştirme veya kalıcı yöntem çağırmadım. Hibernate'in benim için böyle bir şeyi halledebileceği izlenimindeydim.
Bazı etiketlerin bazılarının yeni olduğu ve ısrar edilmesi gerektiği yerde zaten var olabileceğini söylüyorsunuz. Eğer öyleyse, 'inat' yöntemi yerine 'birleştirmek' için bir çağrı olmamalı mı? –
Evet, doğru. Bunu denedim ama yeni bir etiket eklendiğinde TransientObjectException döndürür: nesne kaydedilmemiş bir geçici örnek başvuruyor –
Eğer CascadeType veya nesneyi kaydetmek için kullanılan yöntemi mi kastediyorsunuz? –