কেন নিজস্ব পক্ষের ধারণাটি প্রয়োজনীয়:
দ্বিপাক্ষিক সম্পর্কের নিজস্ব পক্ষের ধারণাটি আসে যে রিলেশনাল ডেটাবেজে বস্তুর ক্ষেত্রে দ্বিপাক্ষিক সম্পর্ক নেই। ডাটাবেসগুলিতে আমাদের কেবল একমুখী সম্পর্ক রয়েছে - বিদেশী কীগুলি।
নামটির 'মালিকানা' থাকার কারণ কী?
হাইবারনেট দ্বারা সন্ধান করা সম্পর্কের নিজস্ব দিকটি হ'ল সেই সম্পর্কের দিকটি যা ডাটাবেসে বিদেশী কীটির মালিকানায় থাকে ।
পাশের মালিকানার ধারণাটি কী সমাধান করে?
নিজস্ব পক্ষ ঘোষণা না করে ম্যাপযুক্ত দুটি সত্তার উদাহরণ নিন :
@Entity
@Table(name="PERSONS")
public class Person {
@OneToMany
private List<IdDocument> idDocuments;
}
@Entity
@Table(name="ID_DOCUMENTS")
public class IdDocument {
@ManyToOne
private Person person;
}
ওও দৃষ্টিকোণ থেকে এই ম্যাপিংটি একটি দ্বি-দিকনির্দেশক সম্পর্ককে নয়, দুটি পৃথক এক-দিকনির্দেশক সম্পর্ককে সংজ্ঞায়িত করে ।
ম্যাপিংটি কেবল টেবিলগুলি তৈরি করে না PERSONS
এবং ID_DOCUMENTS
এটি একটি তৃতীয় সংযুক্তি টেবিল তৈরি করবে PERSONS_ID_DOCUMENTS
:
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)
)
লক্ষ্য করুন প্রাথমিক কী pk
উপর ID_DOCUMENTS
শুধুমাত্র। এই ক্ষেত্রে হাইবারনেট সম্পর্কের উভয় পক্ষকে স্বাধীনভাবে ট্র্যাক করে: আপনি যদি সম্পর্কের কোনও নথি Person.idDocuments
যুক্ত করেন তবে এটি অ্যাসোসিয়েশন সারণীতে একটি রেকর্ড সন্নিবেশ করে PERSON_ID_DOCUMENTS
।
অন্যদিকে idDocument.setPerson(person)
, আমরা যদি কল করি , আমরা টেবিলে বিদেশী কী ব্যক্তি_আইডিকে পরিবর্তন করি ID_DOCUMENTS
। হাইবারনেট ডাটাবেসে দুটি দ্বি- দিকনির্দেশক (বিদেশী কী) সম্পর্ক তৈরি করছে, একটি দ্বি দ্বি নির্দেশমূলক অবজেক্টের সম্পর্ক বাস্তবায়নের জন্য ।
পাশের মালিকানার ধারণা কীভাবে সমস্যার সমাধান করে:
অনেক সময় আমরা কি চাই টেবিলের উপর শুধুমাত্র একটি বিদেশী চাবিকাঠি ID_DOCUMENTS
প্রতি PERSONS
এবং অতিরিক্ত সমিতি টেবিল।
এটি সমাধানের জন্য আমাদেরকে হাইবারনেট কনফিগার করতে হবে সম্পর্কের পরিবর্তনগুলি ট্র্যাক করা বন্ধ করতে Person.idDocuments
। হাইবারনেটের কেবল সম্পর্কের অন্য দিকটিই ট্র্যাক করা উচিত IdDocument.person
এবং এটি করার জন্য আমরা ম্যাপডবাই যুক্ত করি :
@OneToMany(mappedBy="person")
private List<IdDocument> idDocuments;
ম্যাপডবাই এর অর্থ কী?
এর অর্থ এইরকম কিছু: "সম্পর্কের এই দিকে পরিবর্তনগুলি ইতিমধ্যে ম্যাপ করা হয়েছে সম্পর্কের
অন্য পক্ষের আইডডোকামেন্ট.প্রেসনেস, সুতরাং এটি অতিরিক্ত টেবিলে আলাদাভাবে এখানে ট্র্যাক করার প্রয়োজন নেই।"
কোনও গোটচা আছে, ফলাফল কি?
ম্যাপডবাই ব্যবহার করে , আমরা যদি কেবল কল করি person.getDocuments().add(document)
তবে বিদেশী কীটি নতুন দস্তাবেজের সাথে সংযুক্ত ID_DOCUMENTS
হবে না , কারণ এটি সম্পর্কের মালিকানা / ট্র্যাকিং দিক নয়!
নতুন ব্যক্তিকে ডকুমেন্ট লিঙ্ক করতে, আপনি স্পষ্টভাবে ফোন করতে হবে document.setPerson(person)
, কারণ যে মালিক পাশ সম্পর্ক।
ম্যাপডবাই ব্যবহার করার সময়, ডেভেলপারটিতে নতুন সম্পর্কের দৃistence়তা দৃ .় করার জন্য সম্পর্কের সঠিক দিকটি আপডেট করা এবং নিজের সম্পর্কের দিকটি কী তা জানার দায়িত্ব বিকাশকারী is