হাইবারনেটে বিচ্ছিন্ন, ধ্রুবক এবং ক্ষণস্থায়ী বস্তু কী?


101

হাইবারনেটে বিচ্ছিন্ন, ধ্রুবক এবং ক্ষণস্থায়ী বস্তু কী? একটি উদাহরণ দিয়ে ব্যাখ্যা করুন।


সেশন.ক্লোজেলে এটি কী সমস্ত পদার্থ সরিয়ে ফেলবে না যা অধিবেশন সুযোগে স্থির ছিল?
জিগার জোশী

হ্যাঁ এটি সরিয়ে ফেলবে আপনি যখনই কোনও সেশন বন্ধ করবেন তখন অবজেক্টের স্থির স্থিতিকে পৃথক অবস্থায় রূপান্তর করা হবে।
রাহেল

গভীরভাবে কোড সাথে উপলব্ধ করা @Rachel চমৎকার লিংক
Priyank থ্যাকার

কটাক্ষপাত আছে youtube.com/...
Ziaullhaq Savanur

উত্তর:


165

একটি newক্রমাগত শ্রেণী যেটি একটি সঙ্গে যুক্ত নয় এমন দৃষ্টান্ত Session, ডাটাবেজ কোন উপস্থাপনা এবং কোন শনাক্তকারী মান বিবেচনা করা হয় অস্থায়ী হাইবারনেট দ্বারা:

Person person = new Person();
person.setName("Foobar");
// person is in a transient state

একটি অবিচলিত দৃষ্টান্তের ডাটাবেজে একটি উপস্থাপনা থাকে, একটি শনাক্তকারী মান এবং এর সাথে যুক্ত Session। আপনি একটি এর সাথে সংযুক্ত করে একটি ক্ষণস্থায়ী উদাহরণটি স্থির করতে পারেন Session:

Long id = (Long) session.save(person);
// person is now in a persistent state

এখন, যদি আমরা closeহাইবারনেট করি Session, অবিচ্ছিন্ন দৃষ্টান্তটি একটি বিচ্ছিন্ন উদাহরণ হয়ে উঠবে : এটি আর কোনও সংযুক্ত Sessionনয় (তবে এখনও এটি পরিবর্তিত হয়ে আবার নতুনতে সংযুক্ত করা যেতে পারে Session)।

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


সনাক্তকারী মান সম্ভবত কোনও বিষয় স্থির রাখার জন্য একটি কঠোর শর্ত নয় কারণ আমি নির্ধারিত সনাক্তকারী প্রজন্মের কৌশলটি ব্যবহার করতে পারি।
অভিজিৎ কাজনিয়া

উদাহরণটিতে পড়া অধিবেশনটি বন্ধ করার পাশাপাশি, সেশন.এভিক্ট () কল করে একটি উদাহরণ পৃথক করতে পারে। এটি হাইবারনেট দ্বারা পরিচালিত হওয়া থেকে এটি সরিয়ে দেয় (এভাবে ডিবিতে স্বয়ংক্রিয়ভাবে প্রচার হওয়া থেকে পরিবর্তনের প্রতিরোধ করা হয়)। আপনি সেশন.আপডেট () এর মাধ্যমে ডিবিতে পরিবর্তনগুলি প্রেরণ করতে পারেন এবং এটি সেশন.ড্যামার () এর সাথে পুনরায় সংযুক্ত করতে পারেন।
মুশু

4
আমরা অনেক সময় ফ্রেমওয়ার্ক দ্বারা সরবরাহিত মূল ডকসগুলি অনুসরণ করি না .. যা সঠিক সময়ে সঠিক বিবরণ সহ গোপন তথ্য থাকে কেবল অন্বেষণ করা দরকার। কেবলমাত্র
প্রোবটি

A persistent instance has a representation in the databaseসংরক্ষণ ক্রিয়াকলাপ সম্পাদনের আগে একটি অবিচলিত সত্তার ডেটাবেজে কোনও প্রতিনিধিত্ব নেই।
ও.ব্যাডর

4
সুতরাং, বিযুক্ত এবং ক্ষণস্থায়ী সত্তা পার্থক্য আইডি উপস্থিতি ? যদি আমি নির্ধারিত আইডি সহ নতুন উদাহরণ তৈরি করি, তবে আনুষ্ঠানিকভাবে এটি ক্ষণস্থায়ী, কারণ এটি এখনও অব্যাহত নয়, তবে এটি আলাদা করা থেকে আলাদা করা যায় না, কারণ এটির একটি আইডি রয়েছে। ঠিক?
রুসলান স্টেলমাচেনকো

9

হাইবারনেটে অবজেক্টে নিম্নলিখিত পদক্ষেপ রয়েছে:

ক্ষণস্থায়ী - নতুন অপারেটর ব্যবহার করে ইনস্ট্যান্ট করা অবজেক্টগুলিকে ক্ষণস্থায়ী বস্তু বলা হয়।

নতুন অপারেটরটি ব্যবহার করে সবেমাত্র ইনস্ট্যান্ট করা থাকলে কোনও বস্তু ক্ষণস্থায়ী হয় এবং এটি হাইবারনেট সেশনের সাথে সম্পর্কিত নয়। এটি ডাটাবেসে অবিচ্ছিন্ন উপস্থাপনা নেই এবং কোনও সনাক্তকারী মান নির্ধারিত হয়নি। অ্যাপ্লিকেশনটি আর কোনও রেফারেন্স না রাখলে অস্থায়ী দৃষ্টান্তগুলি আবর্জনা সংগ্রহকারী দ্বারা ধ্বংস হয়ে যাবে।

অবিচল - একটি অবজেক্টের সাথে এটির সাথে একটি ডেটাবেস পরিচয় যুক্ত থাকে তাকে ধ্রুবক অবজেক্ট বলে।

একটি অবিচলিত দৃষ্টান্তের ডেটাবেজে একটি উপস্থাপনা এবং একটি শনাক্তকারী মান থাকে। এটি স্রেফ বা লোড হয়ে থাকতে পারে; তবে এটি একটি সেশনের ক্ষেত্রের সংজ্ঞা অনুসারে। হাইবারনেট অবিচ্ছিন্ন অবস্থায় কোনও অবজেক্টে করা যেকোনো পরিবর্তন সনাক্ত করতে পারে এবং কাজের ইউনিট সম্পূর্ণ হওয়ার সাথে সাথে ডাটাবেসের সাথে রাজ্যটিকে সিঙ্ক্রোনাইজ করে।

বিচ্ছিন্ন - একটি বিচ্ছিন্ন দৃষ্টান্ত এমন একটি বস্তু যা অবিচল ছিল, তবে এর সেশনটি বন্ধ করে দেওয়া হয়েছে।

একটি বিচ্ছিন্ন দৃষ্টান্তটি পরবর্তী সময়ে নতুন সেশনে পুনরায় সংযুক্ত করা যেতে পারে, এটি আবার অবিচল করে তোলে। এই বৈশিষ্ট্যটি দীর্ঘ সময় ধরে চলমান ইউনিটগুলির কাজের জন্য একটি প্রোগ্রামিং মডেলকে সক্ষম করে যার জন্য ব্যবহারকারীদের চিন্তাভাবনা প্রয়োজন। আমরা তাদের অ্যাপ্লিকেশন লেনদেনগুলি বলি, ব্যবহারকারীর দৃষ্টিকোণ থেকে কাজের একক।

http://webiwip.com/interview-questions-answers/hibernate-interview-questions/32012


5

আমাকে আবর্জনা সংগ্রাহক দৃষ্টিতেও ব্যাখ্যা করতে দিন।

হাইবারনেট (বা) হাইবারনেটের অবজেক্ট স্কোপের 3 টি অবজেক্ট স্টেট রয়েছে-

  1. ক্ষণস্থায়ী অবস্থা
  2. অবিরাম অবস্থা
  3. বিচ্ছিন্ন অবস্থা

একটি কোড উদাহরণ দিয়ে বোঝা ভাল -

আসুন আমরা একটি পজো ক্লাসকে শিক্ষার্থী বিষয়-> হিসাবে বিবেচনা করি

Student student = new Student(); 

এখন, এই শিক্ষার্থী অবজেক্টটি ক্ষণস্থায়ী অবস্থায় রয়েছে


যখন আমরা এই POJO অবজেক্টটি হাইবারনেট সেশন-> এ সংযুক্ত করি

session.save(student);

এখন এই POJO অবজেক্টটি স্থির অবস্থায় রয়েছে

(আবর্জনা সংগ্রহকারী দৃষ্টিকোণ - জিসি স্থির অবস্থায় থাকা কোনও বস্তু মুছতে পারে না S তাই আমরা বলতে পারি স্থির অবস্থা পজো অবজেক্টের জন্য অস্থায়ী স্টোরেজের মতো )


আমরা পারফর্ম যদি->

session.beginTransaction.commit();

তারপরে POJO অবজেক্টটি স্থায়ী বা ডাটাবেস স্টোরেজ স্থিতিতে থাকে

(আবর্জনা সংগ্রহকারী দৃষ্টিকোণ - জিসি এই অবজেক্টটি মুছে ফেলতে পারে না কারণ এই পোগো অবজেক্টটি এখন জেভিএমের আওতার বাইরে এবং একটি ডাটাবেসের অভ্যন্তরে ফর্ম টেবিলে সঞ্চিত রয়েছে oo সুতরাং আমরা বলতে পারি যে এই ডাটাবেস স্টোরেজ স্টেটটি পজোর স্থায়ী সঞ্চয়স্থানের মতো is বস্তু )


আমরা পারফর্ম যদি->

session.evict(student); 

তারপরে পজো অবজেক্টকে অবিচ্ছিন্ন অবস্থা থেকে বিতাড়িত করা বা সরিয়ে ফেলা হয় এবং বিচ্ছিন্ন অবস্থায় ফিরিয়ে দেওয়া হয় oo সুতরাং POJO অবজেক্টের এই অবস্থাটি বিচ্ছিন্ন অবস্থায় রয়েছে

(আবর্জনা সংগ্রহকারী দৃষ্টিকোণ- জিসিএম সহজেই জেভিএম থেকে বিচ্ছিন্ন রাষ্ট্রের POJO অবজেক্টটি মুছতে পারে)


2

নিম্নলিখিত সত্তা দেওয়া:

@Entity
public class City {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)    
    private long id;

    // other fields and methods.
}

থেকে হাইবারনেট 5.2 ডকুমেন্টেশন (আমিও অন্তর্ভুক্ত করেছি removedরাষ্ট্র):

ক্ষণস্থায়ী

সত্তা সবেমাত্র তাত্ক্ষণিকভাবে করা হয়েছে এবং একটি অধ্যবসায় প্রসঙ্গে জড়িত নয়। এটি ডাটাবেসে অবিচ্ছিন্ন উপস্থাপনা নেই এবং সাধারণত কোনও শনাক্তকারী মান বরাদ্দ করা হয়নি (যতক্ষণ না নির্ধারিত জেনারেটর ব্যবহার করা হত)।

City city = new City();

পরিচালিত, বা অবিরাম

সত্তার একটি সম্পর্কিত শনাক্তকারী রয়েছে এবং একটি অধ্যবসায় প্রসঙ্গে জড়িত। এটি ডেটাবেজে শারীরিকভাবে বিদ্যমান বা নাও থাকতে পারে।

// city will be in a managed/persistent state and any changes to it, will be tracked by hibernate
// and reflected to the database when the persistence context is flushed.
session.save(city);

বিচ্ছিন্ন

সত্তার একটি সম্পর্কিত শনাক্তকারী রয়েছে, তবে অধ্যবসায়ের প্রসঙ্গে এটি আর যুক্ত নয় (সাধারণত কারণ অধ্যবসায় প্রসঙ্গটি বন্ধ ছিল বা প্রসঙ্গটি থেকে উদাহরণটি উচ্ছেদ করা হয়েছিল)

// city is in a detached state, Hibernate is no longer aware of the entity 
session.evict(city)

অপসারণ

সত্তার একটি সম্পর্কিত শনাক্তকারী রয়েছে এবং এটি একটি অধ্যবসায়ের প্রসঙ্গে জড়িত, তবে এটি ডাটাবেস থেকে অপসারণের জন্য নির্ধারিত।

session.remove(city);


দ্রষ্টব্য: হাইবারনেট এপিআই সত্তা রাজ্যগুলির মধ্যে স্যুইচ করার পদ্ধতিগুলির দম্পতিগুলিকে প্রস্তাব দেয় এবং আমি মনে করি এটি হাইবারনেট সেশন ক্লাস অন্বেষণ করার পক্ষে উপযুক্ত ।


0

সঠিক উত্তর ছাড়াও ইতিমধ্যে চিহ্নিত ধ্রুবক, ক্ষণস্থায়ী, বিচ্ছিন্নভাবে হাইবারনেটে কেবলমাত্র বস্তুর অবস্থা।

আরও সুনির্দিষ্টভাবে বলতে গেলে এই তিনটি রাজ্য আসলে হাইবারনেট অবজেক্টের পরিবর্তন এবং সেশন লাইফ চক্রের স্থিতি প্রদর্শন করে

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