Kompozit tuşlarıyla öğelerin listesini kalıcı

oy
0

Başka bir varlığa ilişkili varlıkların listesini kaydetmek için java kalıcılığını kullanıyorum. Burada bazı sorunlar yaşıyorum burada kısaca özetlenmiştir bu.

@Entity public class Offer implements Serializable {
  @Id private Long offerId;

  @OneToMany
  @Column List<OfferCategory> offerCategories;
}

@Entity public class OfferCategory implements Serializable {

  @Embeddable public static class Id implements Serializable
  {
      @Column(name=offer_id)
      private Long offerId;

      @Column(name=category_id)
      private Long categoryId;

      public Id() {}

      public Id(Long offerId, Long categoryId) {
          this.offerId = offerId;
          this.categoryId = categoryId;
      }

      public boolean equals(Object o) {
          if(o != null && o instanceof Id) {
              Id other = (Id) o;
              return this.offerId.equals(other.offerId) &&
                      this.categoryId.equals(other.categoryId);
          }
          else
              return false;
      }

      public int hashCode() {
          return offerId.hashCode() + categoryId.hashCode();
      }
  }
  @EmbeddedId private Id id = new Id();
}

Bir mimariye ben değiştiremem nedeniyle Esasen, ben bir Teklif atanmış olarak Kategoriler listesini kaydetmek gerekir.

Şu anda, Teklif offerCategories alanına koyarak sonra kullanıcıdan Kategoriler listesi aldıktan ve ediyorum. Bana yeni bir öğenin kimliğini ayarlamak için hiçbir yolu yoktur, çünkü Ancak bu, yeni Teklifleri çalışmaz.

JPA ve Dikiş yeniyim, bu yüzden birileri doğru yönde bana bir dürtükledim eğer o büyük takdir.

Oluştur 27/08/2009 saat 00:26
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
0

Eh, şimdi benim çözüm, daha sonra o nesne devam, onların konteyner nesnesine tıkıştırmanıza sonra, bir liste haline şeyler (yeni girişler için anahtarlar oluşturma) her biri kalıcı olmasıdır.

Cevap 30/10/2009 saat 21:47
kaynak kullanıcı

oy
0

Ben öğretici içine bakarken buldum bu :

Sen kompozit anahtarları oluşturmak için bir IdentifierGenerator kullanamazsınız. Bunun yerine uygulama kendi tanımlayıcıları atamanız gerekir.

Yani kendiniz id atamak zorundayız. Belki bir DB dizisi yapmak ve yerli sorgu ile değerlerini getirebilir?
Ve bir açıklama - Liste eşleme (veritabanı tarafından tanımlanır ikramlara Kategoriler sırası) kullanmak istiyorsanız, listede dizin içermesi için bir endeks sütun gerekir. Kategoriler sırası önemli değilse, Set daha uygun olacaktır.

Cevap 28/08/2009 saat 15:44
kaynak kullanıcı

oy
0

Daha önce kompozit kimliği kullanarak denemedim ama nota bir şey @column sadece saha kullanıyor veritabanı sütununun özelliklerini değiştirmek için kullanılır olmasıdır. Bu bir ilişki şart yoktur, bu nedenle hala böyle bir şey gerekir:

@OneToMany    
List<OfferCategory> offerCategories;
Cevap 27/08/2009 saat 23:49
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more