Mặc dù câu hỏi của tôi được diễn giải cụ thể theo cách các mối quan hệ thực thể được mô tả trong khung chơi, sử dụng Hibernate, tôi chắc chắn đây là một khái niệm.Cố gắng hiểu tầm quan trọng của một bên sở hữu mối quan hệ một-nhiều trong ORM
Khi chúng tôi có mối quan hệ một-nhiều, chúng tôi luôn được yêu cầu chỉ định bên sở hữu.
Vì vậy, ví dụ: nếu chúng tôi có mối quan hệ một-nhiều giữa Người và PhoneNumber, chúng tôi sẽ viết mã như thế này.
@Entity
class Person {
@OneToMany(mappedBy="person")
public Set<PhoneNumber> phoneNumbers;
}
@Entity
class PhoneNumber {
@ManyToOne
public Person person;
}
Trong mã ở trên, chủ sở hữu là PhoneNumber. Những ưu và khuyết điểm của hai bên là thực thể sở hữu là gì?
Tôi nhận ra khi thực thể sở hữu là PhoneNUmber, mối quan hệ được biểu thị là ManyToOne, sẽ không kết quả trong bảng nối, trong khi khi bên sở hữu là Person, mối quan hệ được mô tả sẽ là OneToMany. được tạo ra.
Đây có phải là lý do chính để xác định bên sở hữu hoặc có các lý do khác không?
Cập nhật: Tôi vừa nhận ra rằng this thread cung cấp một phần câu trả lời, nhưng tôi hy vọng cũng có thể có các điểm khác.
Tôi đang cố gắng suy nghĩ to. Giả sử trong cả hai trường hợp, chúng tôi thực hiện tìm nạp háo hức. Đối với trường hợp đầu tiên, trong đó PhoneNumber là thực thể sở hữu, chúng tôi sẽ kích hoạt truy vấn đầu tiên để nhận tất cả các thực thể Person và sau đó kích hoạt các truy vấn riêng lẻ cho từng Người để nhận tất cả PhoneNumber cho Người đó. Tuy nhiên, nếu chúng ta có Person là bên sở hữu, chúng ta chỉ cần kích hoạt một truy vấn có tham gia. Tôi xin lỗi nếu đây là một câu hỏi ngớ ngẩn, nhưng là một tham gia không thể với Người là một FK trong PhoneNumber? – Parag
Có, tham gia sẽ có thể với người id FK trong bảng điện thoại là tốt.Ở đây tôi (giả định) rằng một tra cứu bình thường sẽ nhanh hơn nhưng bạn phải xem xét kế hoạch giải thích của bạn để chắc chắn. Một lý do khác (ít nhất là lý thuyết) để sử dụng một bảng quan hệ sẽ cho phép chia sẻ các số điện thoại, giống như một số điện thoại được sử dụng bởi hai người trong ca. Thành thật mà nói, Làm thế nào một lớp ORM hoạt động nên không quan trọng cho những cân nhắc như vậy bởi vì không ai thiết kế lược đồ với lớp ORM trong tâm trí – rjha94
xem câu trả lời của tôi trong chủ đề này cũng như vì lý do tên 'mappedBy' và 'owning side' nếu chúng tôi không xác định một bên sở hữu, GOTCHAs - http://stackoverflow.com/questions/2749689/what-is-the-owning-side-in-an-orm-mapping/21068644#21068644 –