SORU
1 Mayıs 2010, CUMARTESİ


&Quot;sahibi yan" ORM bir eşleme?

JPA yeniyim. Tam olarak ne yapar . bir sorum var şimdi: ^strong>yan sahibidemek? Ben sadece kaba bir fikir var. Bazı eşleme örneklerle bir açıklama ne anlama geliyorbir çok bir, bire bir,)?

PS: aşağıdaki metin açıklaması alıntıdır@OneToOneJava EE 6 belgeler. Konsept görebilirsinizyan sahibiiçinde.

Tek değerli bir ilişki tanımlar başka bir varlık var bire bir çokluk. Normalde değil gerekli belirtmek için ilgili hedef olduğundan açıkça varlık genellikle bu tür olayla başvurulan nesne. Eğer ilişki iki yönlübu olmayan yan sahibibu mappedBy kullanmanız gerekir bu OneToOne elemanı için ek açıklama ilişki alanı ya da belirtin sahibi yan özellik.

CEVAP
11 Ocak 2014, CUMARTESİ


Neden olmak bir yana, gerekli bir kavram

Çift yönlü bir ilişki sahibi olmak bir yana fikri ilişkisel veritabanları nesneleri olduğu gibi iki yönlü ilişkiler vardır yok olmasından kaynaklanır. Veritabanlarında biz sadece tek yönlü ilişkiler - dış anahtarları var.

Adı sebebi nedir 'sahibi yan'?

İlişkinin sahibi olan yan Hazırda Beklet tarafından izlenen ilişki tarafısahibiveritabanındaki yabancı anahtar.

Sahibi yan kavramı çözen sorun nedir?

İki varlık eşlenen örnek alınolmadanbir tarafı İlan Sahibi:

@Entity
@Table(name="PERSONS")
public class Person {
    @OneToMany
    private List<IdDocument>  idDocuments;
}

@Entity
@Table(name="ID_DOCUMENTS")
public class IdDocument {
    @ManyToOne
    private Person person;
}

Tanımlar tek bir bakış OO bir noktadan bu eşleştirme çift yönlü ilişki, amaikitek yönlü ilişkiler ayrı.

Eşleme sadece tablolar PERSONS ID_DOCUMENTS, yaratacak, aynı zamanda üçüncü ortaklık masa PERSONS_ID_DOCUMENTS oluşturun:

CREATE TABLE PERSONS_ID_DOCUMENTS
(
  persons_id bigint NOT NULL,
  id_documents_id bigint NOT NULL,
  CONSTRAINT fk_persons FOREIGN KEY (persons_id) REFERENCES persons (id),
  CONSTRAINT fk_docs FOREIGN KEY (id_documents_id) REFERENCES id_documents (id),
  CONSTRAINT pk UNIQUE (id_documents_id)
)

Birincil anahtar ID_DOCUMENTS pk dikkat edin sadece. Eğer ilgili bir belge eklerseniz Person.idDocuments ortaklık tablosu PERSON_ID_DOCUMENTS Bir kayıt ekler. ilişkinin her iki tarafın da bağımsız olarak Hazırda parça bu durumda:

Eğer idDocument.setPerson(person), biz ararsak diğer yandan, tablodaki yabancı anahtar person_id ID_DOCUMENTS değiştirin. Hazırda bekleme yaratıyorikitek yönlü (yabancı anahtar) veritabanı üzerinde uygulamak ilişkilerbirçift yönlü ilişki nesne.

Sahibi yan kavramı sorunu nasıl çözeceğini:

Ne istediğimizi birçok kez masada sadece bir yabancı anahtar PERSONSve ekstra Derneği tablo doğru ID_DOCUMENTS.

Yapılandırmak için ihtiyacımız var bunu çözmek için ilişki üzerinde değişiklikler Person.idDocuments izleme durdurmak için Hazırda. Hazırda tek parça olmalıdırdiğer17* *ve biz eklemek bunu yapmak için ilişkinin tarafımappedBy:

@OneToMany(mappedBy="person")
private List<IdDocument>  idDocuments;

Bu mappedBy ne anlama geliyor ?

Bu demek gibi bir şey: "ilişkinin bu yana değişiklikler var zatenEşleştirilmiş ilişkinin diğer tarafı İdDocument.bir insan, gerek burada ayrı olarak fazladan bir tablo izler."

Herhangi bir Frikiklerinden, sonuçları vardır?

KullanarakmappedByEğer biz sadece ararsanız, person.getDocuments().add(document), ID_DOCUMENTS yabancı anahtar içindeDEĞİLbu ilişkinin sahibi /izlenen yan olmadığı için yeni belgeye bağlı olması!

Yeni kişi için belge bağlamak, çünkü açıkça document.setPerson(person), araman gerekiyoryan sahibiilişkinin.

KullanırkenmappedBysahibi yan ve veritabanında yeni bir ilişkinin kalıcılık tetiklemek için ilişkinin doğru yan update bilmek geliştirici sorumluluğundadır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AyfionGaming

    AyfionGaming

    20 ŞUBAT 2013
  • Justin Davis

    Justin Davis

    14 Ocak 2008
  • Thehalopianoplayer

    Thehalopiano

    4 ŞUBAT 2011