যেহেতু এটি একটি খুব সাধারণ প্রশ্ন, আমি এই নিবন্ধটি লিখেছি
, যার ভিত্তিতে এই উত্তরটি ভিত্তিক।
একমুখী এক থেকে বহু সমিতি
যেমনটি আমি এই নিবন্ধে ব্যাখ্যা করেছি , আপনি যদি @OneToManyটীকাটি ব্যবহার করে থাকেন তবে নীচের চিত্রের মধ্যে @JoinColumnপিতা বা মাতার Postসত্তা এবং সন্তানের মধ্যকার একটি দিকনির্দেশক সমিতি রয়েছে PostComment:

একমুখী এক থেকে বহু সংযোগ ব্যবহার করার সময়, কেবল পিতামাতার পক্ষই ম্যাসেজ করে।
এই উদাহরণে, কেবল Postসত্তা @OneToManyশিশু PostCommentসত্তার সাথে একটি সংজ্ঞা সংজ্ঞা দেবে :
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "post_id")
private List<PostComment> comments = new ArrayList<>();
দ্বি-নির্দেশিক এক থেকে বহু সংঘবদ্ধ
আপনি যদি এট্রিবিউট সেটটি ব্যবহার করেন @OneToManyতবে mappedByআপনার একটি দ্বিদলীয় সমিতি রয়েছে। আমাদের ক্ষেত্রে, উভয় সত্তারই শিশু সত্তার Postসংকলন রয়েছে PostCommentএবং নীচের চিত্রের দ্বারা চিত্রিত হিসাবে শিশু PostCommentসত্তার পিতামত্তা সত্তার দিকে ফিরে একটি উল্লেখ রয়েছে Post:

ইন PostCommentসত্তা, postনিম্নরূপ সত্তা সম্পত্তি ম্যাপ করা হয়:
@ManyToOne(fetch = FetchType.LAZY)
private Post post;
কারণ আমরা স্পষ্টভাবে নির্ধারণ fetchকরার অ্যাট্রিবিউট FetchType.LAZY, কারণ ডিফল্টরূপে, সমস্ত @ManyToOneএবং @OneToOneসমিতির সংগৃহীত সাগ্রহে যা n + 1 ক্যোয়ারী সমস্যা সৃষ্ঠি করতে পারে করে। এই বিষয় সম্পর্কে আরও তথ্যের জন্য, এই নিবন্ধটি দেখুন ।
ইন Postসত্তা, commentsনিম্নরূপ সমিতি ম্যাপ করা হয়:
@OneToMany(
mappedBy = "post",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<PostComment> comments = new ArrayList<>();
mappedByএর অ্যাট্রিবিউট @OneToManyটীকা রেফারেন্স postসন্তানের সম্পত্তি PostCommentসত্তা, এবং, এই ভাবে, হাইবারনেট জানে যে দ্বিমুখী সমিতি দ্বারা নিয়ন্ত্রিত হয় @ManyToOneপাশ, যা বিদেশী কী কলাম মান এই টেবিল সম্পর্ক উপর ভিত্তি করে তৈরি পরিচালনার দায়িত্বে আছেন।
একটি দ্বিমুখী সমিতি জন্য, আপনি দুই ইউটিলিটি পদ্ধতি, মত থাকতে হবে addChildএবং removeChild:
public void addComment(PostComment comment) {
comments.add(comment);
comment.setPost(this);
}
public void removeComment(PostComment comment) {
comments.remove(comment);
comment.setPost(null);
}
এই দুটি পদ্ধতি দ্বিদলীয় অ্যাসোসিয়েশনের উভয় পক্ষই সিঙ্ক নয় তা নিশ্চিত করে। উভয় প্রান্তের সিঙ্ক্রোনাইজ করা ছাড়া হাইবারনেট গ্যারান্টি দেয় না যে অ্যাসোসিয়েশন রাষ্ট্রের পরিবর্তনগুলি ডাটাবেসে প্রচার করবে।
জেপিএ এবং হাইবারনেটের সাথে দ্বি-নির্দেশমূলক সমিতিগুলিকে সিঙ্ক্রোনাইজ করার জন্য সেরা ওয়াট সম্পর্কে আরও তথ্যের জন্য, এই নিবন্ধটি দেখুন ।
কোনটি বেছে নেবে?
একমুখী @OneToManyসমিতি খুব ভাল সঞ্চালন নেই , তাই আপনি এটি এড়িয়ে চলা উচিত।
আপনি দ্বিমুখী @OneToManyযা আরও কার্যকরী তা ব্যবহার করা ভাল ।