যেহেতু এটি একটি খুব সাধারণ প্রশ্ন, আমি এই নিবন্ধটি লিখেছি
, যার ভিত্তিতে এই উত্তরটি ভিত্তিক।
একমুখী এক থেকে বহু সমিতি
যেমনটি আমি এই নিবন্ধে ব্যাখ্যা করেছি , আপনি যদি @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
যা আরও কার্যকরী তা ব্যবহার করা ভাল ।