Přetrvávající seznam prvků s kompozitními klávesami

hlasů
0

Jsem pomocí Java vytrvalost uložit seznam subjektů, které jsou přidruženy k jinému subjektu. Zde je rychlý přehled, kde mám nějaké problémy.

@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();
}

V podstatě kvůli architektuře nemohu změnit, musím uložit seznam kategorií, jako jsou přiřazena k nabídce.

Právě teď, já začínám seznam kategorií od uživatele a pak jejich uvádění do oblasti offerCategories nabídky. Nicméně, to nefunguje pro nové nabídky, protože neexistuje způsob, jak pro mě nastavit ID nové položky.

Jsem nový SPS a švů, takže pokud mi někdo mohl dát pošťouchnutí správným směrem, že by bylo velmi ocenil.

Položena 27/08/2009 v 00:26
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

No, moje řešení pro tuto chvíli je, že jsem přetrvávají každý z nich (vytvoření klíče pro nové záznamy), pak je nacpat do seznamu, pak nacpat do svého objektu kontejneru, pak přetrvávají tento objekt.

Odpovězeno 30/10/2009 v 21:47
zdroj uživatelem

hlasů
0

Když jsem se podíval do tutoriálu jsem našel toto :

Nelze použít IdentifierGenerator generovat složené klíče. Místo toho aplikace musí přidělit své vlastní identifikátory.

Takže budete muset přiřadit id sami. Možná, že si můžete udělat sekvenci DB a přines své hodnoty s nativním dotazu?
A ještě jedna poznámka - chcete-li použít mapování List (pořadí kategorií v nabídce je definována databáze), je třeba na indexovaný sloupec obsahovat index v seznamu. Pokud je pořadí kategorií, není důležité, Set by bylo vhodnější.

Odpovězeno 28/08/2009 v 15:44
zdroj uživatelem

hlasů
0

Nezkoušel jsem pomocí kompozitního ID předtím, ale jedna věc, kterou si uvědomit, je, že @Column slouží pouze ke změně vlastností databázového sloupce pole se používá. Nestanoví, vztah, takže stále je třeba něco takového:

@OneToMany    
List<OfferCategory> offerCategories;
Odpovězeno 27/08/2009 v 23:49
zdroj uživatelem

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