যেহেতু এটি একটি খুব সাধারণ প্রশ্ন, আমি এই নিবন্ধটি লিখেছি , যার ভিত্তিতে এই উত্তরটি ভিত্তিক।
সত্তার রাষ্ট্রের রূপান্তর
জেপিএ এসকিউএল স্টেটমেন্টগুলিতে সন্নিবেশ, আপডেট বা ডিলিটের মতো সত্তার রাষ্ট্রের রূপান্তরগুলি অনুবাদ করে।

যখন আপনি persistকোনও সত্তা, আপনি EntityManagerস্বয়ংক্রিয়ভাবে বা ম্যানুয়ালি ফ্লাশ করা হয় তখন কার্যকর করা INSERT বিবৃতিটি নির্ধারণ করে যাচ্ছেন ।
যখন আপনি removeকোনও সত্তা, আপনি মোছা বিবৃতিটি সময়সূচী করছেন, যা অধ্যবসায় প্রসঙ্গে প্রবর্তিত হলে কার্যকর করা হবে।
ক্যাসকেডিং সত্তা রাষ্ট্রের রূপান্তর
সুবিধার্থে, জেপিএ আপনাকে পিতা-মাতার সত্তা থেকে একের মধ্যে একের জন্য রাষ্ট্রীয় রূপান্তর প্রচার করতে দেয়।
সুতরাং, যদি আপনার কোনও পিতামাতার Postসত্তা থাকে যা শিশু সত্তার সাথে @OneToManyসম্পর্কিত হয় PostComment:

commentsমধ্যে সংগ্রহ Postসত্তা নিম্নরূপ ম্যাপ করা হয়:
@OneToMany(
mappedBy = "post",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<Comment> comments = new ArrayList<>();
CascadeType.ALL
cascadeঅ্যাট্রিবিউট JPA প্রদানকারী বলে পিতা বা মাতা থেকে সত্তা রাষ্ট্র রূপান্তরটি পাস Postসবাইকে সত্তা PostCommentঅন্তর্ভুক্ত সত্ত্বা commentsসংগ্রহ।
সুতরাং, আপনি যদি Postসত্তাটি সরান :
Post post = entityManager.find(Post.class, 1L);
assertEquals(2, post.getComments().size());
entityManager.remove(post);
জেপিএ সরবরাহকারী PostCommentপ্রথমে সত্তাটি সরিয়ে ফেলবে , এবং যখন সমস্ত শিশু সত্তা মুছে ফেলা হবে তখন এটি সত্তাটিও মুছে ফেলবে Post:
DELETE FROM post_comment WHERE id = 1
DELETE FROM post_comment WHERE id = 2
DELETE FROM post WHERE id = 1
এতিম অপসারণ
আপনি যখন orphanRemovalএট্রিবিউটটি সেট করেন true, তখন জেপিএ সরবরাহকারী removeযখন শিশু থেকে সত্তা সংগ্রহ থেকে অপসারণ করা হয় তখন একটি ক্রিয়াকলাপ নির্ধারণ করতে চলেছে ।
সুতরাং, আমাদের ক্ষেত্রে,
Post post = entityManager.find(Post.class, 1L);
assertEquals(2, post.getComments().size());
PostComment postComment = post.getComments().get(0);
assertEquals(1L, postComment.getId());
post.getComments().remove(postComment);
জেপিএ সরবরাহকারী সম্পর্কিত post_commentরেকর্ডটি সরিয়ে ফেলছে যেহেতু সংগ্রহে PostCommentসত্তাটির আর উল্লেখ নেই comments:
DELETE FROM post_comment WHERE id = 1
ক্যাসকেড মুছে ফেলুন
ON DELETE CASCADEএফ কে পর্যায়ে সংজ্ঞায়িত করা হয়:
ALTER TABLE post_comment
ADD CONSTRAINT fk_post_comment_post_id
FOREIGN KEY (post_id) REFERENCES post
ON DELETE CASCADE;
একবার আপনি এটি করেন, আপনি যদি একটি postসারি মুছে ফেলেন:
DELETE FROM post WHERE id = 1
সম্পর্কিত সমস্ত post_commentসত্তা ডাটাবেস ইঞ্জিন দ্বারা স্বয়ংক্রিয়ভাবে সরানো হবে। তবে আপনি ভুল করে কোনও মূল সত্তা মুছলে এটি খুব বিপজ্জনক অপারেশন হতে পারে।
উপসংহার
জেপিএ cascadeএবং orphanRemovalবিকল্পগুলির সুবিধা হ'ল হারিয়ে যাওয়া আপডেটগুলি রোধ করতে আপনি আশাবাদী লকিং থেকেও উপকার পেতে পারেন ।
আপনি যদি জেপিএ ক্যাসকেডিং মেকানিজম ব্যবহার করেন, আপনার ডিডিএল-স্তর ব্যবহার করার দরকার নেই যা আপনি ON DELETE CASCADEএকাধিক স্তরে বহু শিশু সত্তা মূলের সত্তা সরিয়ে ফেললে খুব বিপজ্জনক ক্রিয়াকলাপ হতে পারে।