2016-04-04 10 views
2

Aralarında çoktan çoğa ilişkisi olan iki varlığım var. İlişki, her bir varlık için, ilgili standart, oldukça standart olan postgreslerde yardımcı eşleştirme tablosu kullanılarak temsil edilir.Hazırda bekletme, @ManyToMany iki yönlü ilişkiyle sonsuz döngüye neden olur

bucket_object_mapping tablosunu arayabilir ve iki sütunu vardır: bucket_id, object_id.

kepçe sınıfı: I (buna gerek yok) Bucket sınıfına hiçbir eşleme Model sınıfında

@Entity 
@Table(name = "bucket") 
public class Bucket { 
    // Some fields omitted here 

    @ManyToMany(cascade = {}, fetch = FetchType.LAZY) 
    @JoinTable(
     name = "bucket_object_mapping", 
     joinColumns = @JoinColumn(name = "bucket_id"), 
     inverseJoinColumns = @JoinColumn(name = "object_id") 
    ) 
    private List<Model> models; 
} 

Ben bu basit bir sorgu çalıştırdığınızda:

SELECT bucket FROM Bucket bucket WHERE bucket.customerId=:customerId 

Veriler ilk başta iyi bir şekilde döndürülür, ancak sonranumaralı sorgulara sonsuz bir döngü verilir. 10 tablo çalışmaya başlar ve neden emin değilim. Sonuç listesini bir SpringMVC denetleyicisi üzerinden döndürdüğümde böyle görünüyor. Bucket'u bir DTO'ya dönüştürüyorum, ancak Model (Bu yalnızca Model öğesinin Bucket öğesinin herhangi bir referansı yoktur, dolayısıyla dairesel bir başvuru sorunu olmaması gerekir).

Kontrolör kodu:

@RequestMapping(value = "", method = RequestMethod.GET) 
@ResponseBody 
public List<BucketDTO> getAllByCustomer(@RequestParam(value = "customerid") final Long customerId) { 
    return bucketService.getAllBucketsForCustomer(customerId); 
} 

hizmetinde kodu:

@Transactional 
public List<BucketDTO> getAllBucketsForCustomer(final Long customerId) { 
    List<Bucket> buckets = bucketDao.getBucketsForCustomer(customerId); 
    List<BucketDTO> result = bucketDtoConverter.toDtoList(buckets); 
    return result 
} 
+0

yol açtı sohbet takip edebilir? – LearningPhase

+0

@LearningPhase - soruyu düzenledi. Ayrıca denetleyici ile DAO arasında köprü görevi gören hizmet yöntemini ekledim. – Avi

+0

Show Model.class. Bucket.class ile ilişkiniz var mı? – Victor1125

cevap

4

için Model.class üzerine ilişkiyi ve hiçbir @MappedBy böylece Bucket için masaya bucket_object_mapping ilk kayıt oluşturmak ve ikinci kayıt var olduğunda sorun Model kökenli olduğunu kapatır. Model, Bucket referansına sahip olmasa da, @OneToMany ek açıklamasına sahip başka bir nesneyle ilgili bir referansa sahiptir (ve başvurulan nesne ile Model başvuruyor).

Her şeyi (Kova, Model ve 3. nesne) DTO'lara dönüştürdüm ve şimdi çalışıyor. Çalışmak için nedeni, jackson lib sonucunu serileştirmeye çalıştığında sonsuz döngü nedeniyle neden oldu. Başka bir nesneye Model nesnesinden iki yönlü bir referans olduğu için, bunları serileştirmeye çalışan sonsuz bir döngüde sıkışmıştı. DTO'ya dönüştürerek, yalnızca Model'un diğer nesneyle bir referansa sahip olduğundan emin olduk, böylece sorunu çözdü.

Size denetleyicisi için kod gönderebilir misiniz cevap here

-1

Sana (eğer varsa) Modeli gelen ilişkiyi silmek veya MappedBy eklemek gerekir thnik. Eğer Model

+0

Cevabınızı tam olarak anladığımdan emin değilim. Ama 'Model'de' Kova'dan hiç bahsetmiyorum. İlişkinin iki yönlü olmasına rağmen, sadece şu anda 'Kova' ucundan ihtiyaç duyulur. Yani - 'Model' varlık – Avi

+0

'' Kova'dan söz etmiyorum. Tamam, çok üzgünüm. – Victor1125

+0

Sorun değil. Yardım etmeye çalıştığınız için teşekkür ederiz. – Avi