2016-04-26 10 views
6

Böyle tanımlanan bir Sözleşme sınıf var:Yay Verisi MongoDB: Belge başka bir belgeye yerleştirildiğinde benzersiz dizinlenmiş alanı nasıl yok sayar?

@Document 
public class Contract { 

    @Id 
    private String id; 

    @Indexed(unique = true) 
    private String ref; 

    private String status = "pending"; 

    // getter & setter & hashcode & equals & tostring... 
} 

ben zamanla sözleşme durumunu kaydetmek istiyoruz, bu yüzden böyle bir Sürüm sınıfını yarattı: Ben defalarca kaydetmeyi deneyin

@Document 
public class Version { 

    @Id 
    private String id; 

    private Contract contract; 

    private Instant createdAt; 

    // getter & setter & hashcode & equals & tostring... 
} 

zaman içinde sürüm nesnesi, yinelenen anahtar özel durumum var. Bence, buradaki şikâyetçi olan sözleşmenin ref anahtarındaki yinelenen anahtar endeks.

Bu tür bir şeyi nasıl başarabilirim?

+0

Sorununuzu kapalı gösterir biraz kod parçacığını verebilir misiniz? Modelinizi tanımlama şekliniz, Kişi nesnesi Sürüm 1 içinde yuvalandığından hiçbir istisna atılmamalıdır; bu, bir sürümdeki bir kişinin bir alt belgede "sürüm (ler)" e kaydedileceği anlamına gelir. "iletişim (ler)" koleksiyonu önemli olmamalıdır. –

+0

Bundan daha fazla yazmadım. Yalnızca, üzerinde benzersiz bir dizin bulunan bir diğerine yerleştirilmiş iki nesne oluşturun ve aynı nesneyle aynı nesneyle iki nesneyi kaydetmeye çalışın ve yinelenen bir giriş istisnasına sahip olursunuz. –

cevap

0

Bunu bahar bağlamından gerçekleştirmenin bir yolu olup olmadığından emin değilim.

En iyi yol, tüm dizin tanımını kodunuzun dışına çıkarmaktır. Çevrimdışı bir komut dosyası aracılığıyla başvuruyorum. Komut dosyalarını mongeez gibi araçları kullanarak uygulayabilirsiniz. Uygulama başlangıcında çalışacak şekilde yapılandırılabilir, böylece her zaman konumdan bağımsız olarak çalışmasını sağlayabilirsiniz. Uygulama bir kez yayınlandıktan sonra, kontrollü bir şekilde yeni indeksler oluşturmak isteyebiliriz. Kodda gömülü olması, yalnızca başlangıçta çalışacağı için bu avantajı vermeyebilir.

Çevrimdışı komut dosyaları kullanıyorsanız, toplam kontrolünüz vardır.

1

Basitçe şöyle @Reference ekleyin:

@Document 
public class Version { 

    @Id 
    private String id; 

    @Reference 
    private Contract contract; 

    private Instant createdAt; 

    // getter & setter & hashcode & equals & tostring... 
} 
+0

Bu aslında çalışır, ancak bu konuda resmi bahar veri mongodb referansta bu konuda hiçbir kelime yoktur. –

İlgili konular