জেপিএ এবং হাইবারনেটে অবিচ্ছিন্ন () এবং মার্জ () এর মধ্যে পার্থক্য কী?


119

হাইবারনেটে অবিচ্ছিন্ন () এবং মার্জ () এর মধ্যে পার্থক্য কী?

persist() একটি আপডেট এবং INSERT ক্যোয়ারী তৈরি করতে পারে, যেমন:

SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
A a=new A();
session.persist(a);
a.setName("Mario");
session.flush();

এক্ষেত্রে ক্যোয়ারী এই জাতীয় উত্পন্ন হবে:

Hibernate: insert into A (NAME, ID) values (?, ?)
Hibernate: update A set NAME=? where ID=?

সুতরাং persist()পদ্ধতিটি একটি সন্নিবেশ এবং একটি আপডেট তৈরি করতে পারে ।

এখন সাথে merge():

SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
Singer singer = new Singer();
singer.setName("Luciano Pavarotti");
session.merge(singer);
session.flush();

এটি আমি ডাটাবেসে দেখছি:

SINGER_ID   SINGER_NAME
1           Ricky Martin
2           Madonna
3           Elvis Presley
4           Luciano Pavarotti

এখন ব্যবহার করে একটি রেকর্ড আপডেট করুন merge()

SessionFactory sef = cfg.buildSessionFactory();
Session session = sef.openSession();
Singer singer = new Singer();
singer.setId(2);
singer.setName("Luciano Pavarotti");
session.merge(singer);
session.flush();

এটি আমি ডাটাবেসে দেখছি:

SINGER_ID   SINGER_NAME
1           Ricky Martin
2           Luciano Pavarotti
3           Elvis Presley

7
জাভাডোক তারা কী করে এবং পার্থক্যগুলি কী তা সম্পর্কে খুব স্পষ্ট। আপনি এটি পড়েছেন এবং বুঝতে পেরেছেন?
skaffman

1
পরীক্ষা করে দেখুন stackoverflow.com/questions/161224/...
Jigar থেকে জোশী

উত্তর:


144

জেপিএ স্পেসিফিকেশনে জাভাডোকের চেয়ে ভাল এই ক্রিয়াকলাপগুলির শব্দার্থবিজ্ঞানের খুব সুনির্দিষ্ট বিবরণ রয়েছে:

অস্তিত্ব এক্সের জন্য প্রয়োগ করা অবিরত অপারেশনটির শব্দার্থবিজ্ঞানগুলি নিম্নরূপ:

  • এক্স যদি কোনও নতুন সত্তা হয় তবে তা পরিচালিত হয়। সত্তা এক্সটি লেনদেনের প্রতিশ্রুতিবদ্ধ বা তার আগে বা ফ্লাশ অপারেশনের ফলে ডেটাবেজে প্রবেশ করা হবে।

  • যদি এক্স একটি পূর্বনির্ধারিত পরিচালিত সত্তা হয় তবে এটি অবিচ্ছিন্ন ক্রিয়াকলাপ দ্বারা এড়ানো হবে। যাইহোক, জিদ অপারেশন X দ্বারা রেফারেন্সড সত্ত্বা থেকে cascaded হলে এই অন্যান্য সত্ত্বা থেকে এক্স থেকে সম্পর্ক সঙ্গে সটীক হয় cascade=PERSISTবা cascade=ALL সমতুল্য এক্সএমএল বর্ণনাকারী উপাদান সঙ্গে নিদিষ্ট টীকা উপাদান মান বা।

  • যদি এক্স একটি সরানো সত্তা হয়, তবে এটি পরিচালিত হয়।

  • এক্স যদি কোনও বিচ্ছিন্ন বস্তু হয় EntityExistsExceptionতবে অবিচ্ছিন্ন ক্রিয়াকলাপটি চলাকালীন নিক্ষেপ করা হতে পারে , EntityExistsExceptionবা অন্য PersistenceExceptionকোনওটি ফ্লাশ বা কমিট সময় নিক্ষেপ করা হতে পারে।

  • এক্স থেকে প্রাপ্ত সম্পর্কের দ্বারা ওয়াই রেফারেন্সযুক্ত সমস্ত সত্তার জন্য, যদি ওয়াইয়ের সাথে সম্পর্ক ক্যাসকেড উপাদান মানের সাথে টিকা দেওয়া হয়েছে cascade=PERSISTবা cascade=ALL, অবিচ্ছিন্ন ক্রিয়াকলাপটি ওয়াই প্রয়োগ করা হয় is


সত্তা এক্সটিতে প্রয়োগ হওয়া মার্জ অপারেশনটির শব্দার্থবিজ্ঞান নীচে রয়েছে :

  • যদি এক্স একটি বিচ্ছিন্ন সত্তা হয়, তবে এক্স এর স্থিতিটি পূর্বের বিদ্যমান পরিচালিত সত্তা উদাহরণের অনুলিপি হিসাবে একই পরিচয় বা এক্স এর একটি নতুন পরিচালিত অনুলিপি এক্স তৈরি করা হয়।

  • এক্স যদি কোনও নতুন সত্তার উদাহরণ হয় তবে একটি নতুন পরিচালিত সত্তা উদাহরণ এক্স তৈরি করা হবে এবং এক্সের স্থিতিটি নতুন পরিচালিত সত্তা উদাহরণ এক্সে অনুলিপি করা হবে।

  • যদি এক্স সরানো সত্তা উদাহরণস্বরূপ IllegalArgumentExceptionহয় তবে একটি মার্জ অপারেশন দ্বারা নিক্ষেপ করা হবে (বা লেনদেনের অঙ্গীকার ব্যর্থ হবে)।

  • এক্স যদি একটি পরিচালিত সত্তা হয় তবে এটি মার্জ অপারেশন দ্বারা উপেক্ষা করা হবে, তবে, এই সম্পর্কগুলি ক্যাসকেড উপাদানটির মান cascade=MERGEবা টীকাপত্রের সাথে বর্ণিত থাকলে এক্স থেকে সম্পর্কের দ্বারা রেফারেন্সিত সত্তাগুলিতে ক্যাসকেড করা হয় cascade=ALL

  • ক্যাসকেড উপাদানটির মান থাকা এক্স থেকে সম্পর্কের দ্বারা রেফারেন্সযুক্ত সমস্ত সংস্থার জন্য cascade=MERGEবা cascade=ALLY এর পুনরাবৃত্তভাবে Y হিসাবে মার্জ করা হয়েছে। এক্স দ্বারা রেফারেন্সযুক্ত এরকম সমস্ত ওয়াইয়ের জন্য এক্স 'রেফারেন্স ওয়াই' তে সেট করা আছে। (দ্রষ্টব্য, যদি এক্স পরিচালনা করা হয় তবে এক্স হ'ল এক্স 'এর মতো একই বস্তু))

  • এক্স যদি অন্য সত্তা ওয়াইয়ের রেফারেন্স সহ X এর সাথে একত্রীকরণের সত্তা, যেখানে নির্দিষ্ট cascade=MERGEবা cascade=ALLনির্দিষ্ট না করা থাকে, তবে এক্স থেকে একই অ্যাসোসিয়েশন নেভিগেশন Y এর মতো একই অবিচ্ছিন্ন পরিচয় সহ একটি পরিচালিত অবজেক্ট Y এর একটি রেফারেন্স দেয় yield


তথ্যের জন্য ধন্যবাদ। আমি উভয় সংজ্ঞার শব্দার্থবিজ্ঞান দেখতে পাচ্ছি। তবে প্রশ্ন তাদের মধ্যে পার্থক্য সম্পর্কে। persistবনাম প্রতিটি ভিন্ন আচরণের জন্য সম্ভবত রাজ্যগুলির তালিকা এবং 2 টি উপ-বিভাগের উপস্থাপন করবেন merge?
অ্যালিকেলজিন-কিলাকা

25

এই থেকে আসছে JPA। খুব সাধারণ উপায়ে:

  • persist(entity) একে একে ডিবিতে যুক্ত করার জন্য একেবারে নতুন সত্তার সাথে ব্যবহার করা উচিত (যদি সত্তা ইতিমধ্যে ডিবিতে বিদ্যমান থাকে তবে এন্টিএক্সিজট এক্সপশন থ্রো থাকবে)।

  • merge(entity) সত্তাটি পৃথক করে রাখা হয়েছিল এবং পরিবর্তন করা থাকলে অস্তিত্বটিকে অধ্যবসায় প্রসঙ্গে ফিরিয়ে আনতে ব্যবহার করা উচিত।


আপনি আপনার ব্যাখ্যা একটি উত্স যোগ করতে পারেন? ধন্যবাদ।
অ্যালিকেলজিন-কিলাকা

@ অ্যালিকেলজিন-কিলাকার এই জাতীয় ব্যাখ্যা, যেমন আমার মনে আছে, আমি একটি "বিগনিং জাভা ইই 7" বইয়ের সন্ধান পেয়েছি।
ক্রিস্টিয়ান

12

বিযুক্তিকে কেবল নতুন সত্তাগুলিতে কল করা উচিত, যখন মার্জটি বোঝানো আলাদা সংস্থাগুলি পুনরায় সংযুক্ত করার জন্য।

আপনি যদি নির্ধারিত জেনারেটরটি ব্যবহার করে থাকেন তবে অবিরতের পরিবর্তে মার্জটি ব্যবহার করা অপ্রয়োজনীয় এসকিউএল স্টেটমেন্টের কারণ হতে পারে , সুতরাং কার্যকারিতা প্রভাবিত করে।

এছাড়াও, পরিচালিত সংস্থাগুলির জন্য মার্জ কল কলটিও একটি ভুল যেহেতু পরিচালিত সংস্থাগুলি স্বয়ংক্রিয়ভাবে হাইবারনেট দ্বারা পরিচালিত হয় এবং পার্সেস্টি কনটেক্সট ফ্লাশ করার পরে নষ্ট চেকিং ব্যবস্থার মাধ্যমে তাদের রাষ্ট্রটি ডাটাবেস রেকর্ডের সাথে সুসংগত হয় ।


1

সবচেয়ে গুরুত্বপূর্ণ পার্থক্যটি হ'ল:

  • persistপদ্ধতির ক্ষেত্রে যদি অধ্যবসায় প্রসঙ্গে পরিচালনা করতে হয় এমন সত্তা যদি অধ্যবসায় প্রসঙ্গে ইতিমধ্যে উপস্থিত থাকে তবে নতুনটিকে উপেক্ষা করা হবে। (কিছুই ঘটেনি)

  • তবে mergeপদ্ধতির ক্ষেত্রে , ইতিমধ্যে দৃ pers়তা প্রসঙ্গে পরিচালনা করা সত্তাকে নতুন সত্তা (আপডেট করা) দ্বারা প্রতিস্থাপন করা হবে এবং এই আপডেট হওয়া সত্তার অনুলিপি ফিরে আসবে। (আপনি যদি অধ্যবসায় প্রসঙ্গে আপনার পরিবর্তনগুলি প্রতিবিম্বিত করতে চান তবে এখন থেকে এই প্রত্যাবর্তিত সত্তায় কোনও পরিবর্তন করা উচিত)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.