উত্তর:
বলুন আপনার বাবা-মা আছে এবং সেই বাবা-মায়ের বাচ্চাদের সংকলন রয়েছে। হাইবারনেট এখন বাচ্চাদের "অলস-লোড" করতে পারে, যার অর্থ পিতামাতার লোড করার সময় এটি আসলে সমস্ত বাচ্চাকে বোঝায় না। পরিবর্তে, অনুরোধ করার সময় এটি তাদের লোড করে। আপনি হয় স্পষ্টভাবে এটির জন্য অনুরোধ করতে পারেন বা, এবং এটি আরও বেশি সাধারণ, যখন আপনি কোনও শিশু অ্যাক্সেস করার চেষ্টা করবেন তখন হাইবারনেট এগুলি স্বয়ংক্রিয়ভাবে লোড হবে।
অলস-লোডিং পারফরম্যান্সকে উল্লেখযোগ্যভাবে উন্নত করতে সাহায্য করতে পারে যেহেতু প্রায়শই আপনার বাচ্চাদের প্রয়োজন হয় না এবং তাই এগুলি লোড হবে না।
এছাড়াও এন + 1-সমস্যা থেকে সাবধান থাকুন। আপনি সংগ্রহ অ্যাক্সেস করার সময় হাইবারনেট আসলে সমস্ত শিশুকে লোড করবে না। পরিবর্তে, এটি প্রতিটি শিশুকে স্বতন্ত্রভাবে লোড করবে। সংগ্রহটি পুনরাবৃত্তি করার সময়, এটি প্রতিটি শিশুর জন্য একটি প্রশ্নের সন্ধান করে। এটি এড়াতে, আপনি একইসাথে সমস্ত বাচ্চাকে লোড করতে হাইবারনেট চালিয়ে যেতে পারেন, যেমন প্যারেন্ট.জেটচিল্ড্রেন ()। আকার () কল করে।
"অলস লোড" অর্থ যে কোনো সত্তার লোড হবে শুধুমাত্র যখন আপনি আসলে জন্য সত্তা ব্যবহারের প্রথম সময়।
প্যাটার্ন এই মত হল:
public Entity getEntity() {
if (entity == null) {
entity = loadEntity();
}
return entity;
}
এটি পূর্বেই একটি বড় ডেটাসেটে সমস্ত সত্ত্বাগুলি প্রিলোডিং / প্রিফিলিংয়ের ব্যয় সাশ্রয় করে যখন আপনাকে আসলে সর্বোপরি এর সমস্ত প্রয়োজন হয় না ।
হাইবারনেটে, আপনি শিশু সত্তাগুলির একটি সংগ্রহটি আলস্যভাবে লোড করার জন্য কনফিগার করতে পারেন। প্রকৃত অলস লোড তারপর পদ্ধতি ভিতরে সম্পন্ন করা হয় PersistentSet
"হুড অধীনে" যা হাইবারনেট ব্যবহারসমূহ যেমন সত্ত্বা সংগ্রহ দায়িত্ব অর্পণ করা Set
।
যেমন
public class Parent {
private Set<Child> children;
public Set<Child> getChildren() {
return children;
}
}
।
public void doSomething() {
Set<Child> children = parent.getChildren(); // Still contains nothing.
// Whenever you call one of the following (indirectly),
// Hibernate will start to actually load and fill the set.
children.size();
children.iterator();
}
মার্টিন ফোলার এন্টারপ্রাইজ অ্যাপ্লিকেশন আর্কিটেকচারের প্যাটার্নগুলিতে অলস লোড প্যাটার্নটি সংজ্ঞায়িত করেছেন :
এমন কোনও বস্তু যা আপনার প্রয়োজনীয় সমস্ত ডেটা ধারণ করে না তবে কীভাবে তা পাবেন তা জানে।
সুতরাং, কোনও প্রদত্ত বস্তুটি লোড করার সময়, ধারণাটি সম্পর্কিত অবজেক্ট (গুলি) লোড না করা যা আপনি তাত্ক্ষণিকভাবে সম্পর্কিত পারফরম্যান্স ব্যয় বাঁচাতে ব্যবহার করতে পারবেন না। পরিবর্তে, সম্পর্কিত অবজেক্ট (গুলি) কেবল ব্যবহৃত হলে লোড হবে।
এটি ডেটা অ্যাক্সেস এবং হাইবারনেটের সাথে সুনির্দিষ্ট কোনও প্যাটার্ন নয় তবে এই জাতীয় ক্ষেত্রগুলিতে এটি বিশেষভাবে কার্যকর এবং হাইবারনেট এক থেকে একাধিক সমিতি এবং একক-পয়েন্ট অ্যাসোসিয়েশন (এক-এক-এক এবং একাধিক থেকে এক) অলস লোডিংকে সমর্থন করে also নির্দিষ্ট অবস্থার অধীনে. হাইবারনেট 3.0 রেফারেন্স ডকুমেন্টেশনের 19 অধ্যায়ে অলস আলাপচারিতা আরও বিশদে আলোচনা করা হয়েছে ।
বাইফায়াল্ট অলস লোডিংটি সত্য az অলস লোডিংয়ের অর্থ যখন নির্বাচিত ক্যোয়ারী কার্যকর করা হয় এটি ডাটাবেসটিতে আঘাত করবে না। এটি গিটার ফাংশনের জন্য অপেক্ষা করবে, যখন আমাদের তখন প্রয়োজন হবে, এটি ডেটাবেস থেকে আনা হবে। উদাহরণস্বরূপ: আপনি এমন একটি পিতা বা মাতা, যার প্রচুর খেলনা রয়েছে। তবে বর্তমান সমস্যাটি যখনই আপনি তাকে ডাকেন (আমরা ধরে নিই যে আপনার একটি ছেলে আছে), তিনি আপনার কাছে সমস্ত খেলনা নিয়ে এসেছেন। এখন এটি একটি সমস্যা যেহেতু আপনি চান না যে তিনি সবসময় তাঁর খেলনাগুলি ঘিরে রাখেন। সুতরাং যৌক্তিক অভিভাবক হওয়ার কারণে আপনি ঠিক এগিয়ে যান এবং সন্তানের খেলনাগুলি আলস্য হিসাবে সংজ্ঞায়িত করেন। এখন যখনই আপনি তাকে কল করবেন তিনি কেবল খেলনা ছাড়াই আপনার কাছে আসবেন।
অলস আনয়ন সিদ্ধান্ত নেয় যে প্যারেন্ট অবজেক্টটি লোড করার সময় চাইল্ড অবজেক্টগুলি লোড করা হবে কিনা। আপনার এই সেটিংটি পিতামাত্ত শ্রেণীর সংশ্লিষ্ট হাইবারনেট ম্যাপিং ফাইলটি করতে হবে।
Lazy = true
(যার অর্থ শিশু লোড না করা) ডিফল্টরূপে শিশু সামগ্রীর অলস লোডিংটি সত্য।
এটি নিশ্চিত করুন যে getChild()
পিতামাতার কাছে পদ্ধতি কল করে অ্যাপ্লিকেশনটিতে স্পষ্টভাবে আবেদন করা না থাকলে শিশু getChild()
ऑब्जेक्टগুলি লোড করা হয়নি this এই ক্ষেত্রে হাইবারনেট যখন প্যারেন্ট অবজেক্টে বাস্তবে ডাকা হয় তখন বাচ্চাকে লোড করার জন্য একটি নতুন ডাটাবেস কল দেয় ।
তবে কিছু ক্ষেত্রে আপনার পিতা-মাতাকে বোঝাই করা অবস্থায় শিশুদের বস্তুগুলি লোড করা দরকার। কেবল অলস = মিথ্যা করুন এবং হাইবারনেট যখন পিতামাতাকে ডেটাবেস থেকে লোড করা হয় তখন বাচ্চাটি লোড করবে।
উদাহরণ: আপনার যদি একটি টেবিল থাকে? EMPLOYEE কর্মচারী অবজেক্টে ম্যাপ করা হয়েছে এবং এতে ঠিকানা সামগ্রীর সেট রয়েছে। অভিভাবক শ্রেণি: কর্মী শ্রেণি, শিশু শ্রেণি: ঠিকানা শ্রেণি
public class Employee {
private Set address = new HashSet(); // contains set of child Address objects
public Set getAddress () {
return address;
}
public void setAddresss(Set address) {
this. address = address;
}
}
কর্মচারী। Hbm.xML ফাইলে
<set name="address" inverse="true" cascade="delete" lazy="false">
<key column="a_id" />
<one-to-many class="beans Address"/>
</set>
উপরের কনফিগারেশন। যদি lazy="false"
: - আপনি যখন কর্মচারী বস্তুটি লোড করেন তখন সেই সময়ের শিশু অবজেক্টের ঠিকানাটিও লোড হয়ে সেটএড্রেসস () পদ্ধতিতে সেট করা থাকে। আপনি যদি কর্মচারী.গেটএড্রেস () কল করেন তবে ডেটা লোড করা হবে fresh কোনও নতুন ডাটাবেস কল নেই।
যদি lazy="true"
: - এটি ডিফল্ট কনফিগারেশন। যদি আপনি উল্লেখ না করেন তবে হাইবারনেট অলস = সত্য বলে বিবেচনা করুন। আপনি যখন কর্মচারী বস্তুটি লোড করেন তখন সেই সময় শিশু অবজেক্ট অ্যাড্রেস লোড হয় না। ঠিকানার বিষয়গুলি পেতে আপনাকে ডেটা বেসে অতিরিক্ত কল দরকার extra আপনি যদি কল করেন employee.getAdress()
তবে সেই সময় ডাটাবেস ক্যোয়ারী আগুনে ফেলা এবং ফলাফলগুলি ফেরত দেয়। তাজা ডাটাবেস কল।
সাধারণ লোকের ভাষায়, আপনি যেমন একটি কেক তৈরি করছেন এমনটি হ'ল আপনার ফ্রিজ থেকে 5-10 উপাদান দরকার হবে। আপনার দুটি বিকল্প রয়েছে, ফ্রিজে থেকে সমস্ত উপাদান পান এবং এটি আপনার রান্নাঘরের প্ল্যাটফর্মে রাখুন, বা যখন আপনার প্রয়োজন হবে তখন আইটেমটি আনুন।
একইভাবে, আগ্রহী লোডিংয়ের সময়, আপনি শিম এবং এর সাথে সম্পর্কিত ক্লাসগুলির সমস্ত তথ্য (শিশু বা হ'ল সম্পর্ক নয় তবে একটি সম্পর্ক রয়েছে, যেমন পিঠে ময়দা রয়েছে, দুধ আছে, ক্রিম রয়েছে ইত্যাদি) এবং অলস লোডিংয়ের ক্ষেত্রে প্রথমে আপনি কেবল তার শনাক্তকারী এবং মানগুলি নিয়ে আসুন যা একই টেবিল থেকে আগত হয় (প্রয়োজনীয় উপাদানগুলি যা প্রথমে আপনার বাটিতে আপনার পিঠে প্রয়োজন হবে)। অন্যান্য টেবিল থেকে যে সমস্ত তথ্য আসছে তা যখন প্রয়োজন হবে / ব্যবহৃত হবে তখনই তা এনে দেওয়া হবে।
অলস সেটিংটি প্যারেন্ট অবজেক্টটি লোড করার সময় চাইল্ড অবজেক্টগুলি লোড করা হবে কিনা তা স্থির করে You আপনার পিতামাত্ত শ্রেণীর হাইবারনেট ম্যাপিং ফাইলটি এই সেটিংটি করতে হবে L অলস = সত্য (অর্থ শিশুটি লোড করবেন না) ডিফল্টরূপে শিশুদের বস্তুর অলস লোডিং সত্য is । এটি নিশ্চিত করুন যে পিতামাতাকে getChild () পদ্ধতিতে কল করে অ্যাপ্লিকেশনটিতে স্পষ্টভাবে আবেদন না করা পর্যন্ত শিশুদের বস্তুগুলি লোড করা হয়নি this এই ক্ষেত্রে হাইবারনেট সন্তানের লোড করার জন্য একটি নতুন ডাটাবেস কল দেয় যখন getChild () পিতামাতার কাছে কার্যত আহ্বান জানানো হয় অবজেক্ট.কিন্তু কিছু ক্ষেত্রে আপনাকে পিতা-মাতার উপর চাপ দেওয়া অবস্থায় শিশু অবজেক্টগুলি লোড করতে হবে। কেবল অলস = মিথ্যা করুন এবং হাইবারনেট পিতামাতাকে ডাটাবেস থেকে লোড করা অবস্থায় শিশুকে বোঝাই করবে x উদাহরণস্লাজী = সত্য (ডিফল্ট) ব্যবহারকারী শ্রেণীর ঠিকানা সন্তানের যদি ঘন ঘন প্রয়োজন না হয় তবে আলস্য করতে পারেন।
অলস লোডিং আপনাকে সমিতি পুনরুদ্ধার পিছিয়ে দিতে বা আনার কৌশলটির উপর আরও ভাল নিয়ন্ত্রণ রাখতে দেয়।
আপনি যখন ইগর লোডিং ব্যবহার করেন, আপনি একটি বিশ্বব্যাপী আনার পরিকল্পনাটি সংজ্ঞায়িত করেন যা ক্যোয়ারির সময় ওভাররাইড করা যায় না, অর্থাত আপনি সত্তার মডেলটি ডিজাইনের সময় আপনি যে সিদ্ধান্ত নিয়েছিলেন তা সীমাবদ্ধ। উৎসুক আনার একটি কোড গন্ধ আনার কৌশল একটি ক্যোয়ারী সময় নীতি এবং এটি অন্য একটি ব্যবসায়িক ব্যবহারের মামলা থেকে পৃথক হতে পারে, কারণ।
আনার কৌশল একটি খুব গুরুত্বপূর্ণ দিক, যেমন অত্যধিক উৎসুক আনার গুরুতর কর্মক্ষমতা সম্পর্কিত সমস্যার সৃষ্টি করতে পারে।
অলস লোডিং একটি ডিজাইনের প্যাটার্ন যা সাধারণত কোনও কম্পিউটারের প্রোগ্রামিংয়ে ব্যবহৃত হয় যা কোনও নির্দিষ্ট বিন্দুর প্রয়োজন না হওয়া অবধি প্রাথমিকভাবে পিছিয়ে দিতে। এটি যদি সঠিকভাবে এবং যথাযথভাবে ব্যবহার করা হয় তবে প্রোগ্রামটির পরিচালনায় দক্ষতায় অবদান রাখতে পারে
উইকিপিডিয়া
হাইবারনেট. org থেকে অলস লোডিংয়ের লিঙ্ক
ঠিক আছে এর অর্থ হ'ল ডেটা লোড করার অর্থ বর্তমানে আপনার পুরো গুচ্ছ ডেটা একবারে লোড করার পরিবর্তে প্রয়োজন যা আপনি এখন ব্যবহার করবেন না। এর মাধ্যমে অ্যাপ্লিকেশন লোডের সময়টি স্বাভাবিকের চেয়ে দ্রুততর করা।
হিবার্যান্ট সত্ত্বা এবং সংগ্রহ উভয়ের জন্য অলস সূচনাটির বৈশিষ্ট্যটিকে সমর্থন করে। হাইবারনেট ইঞ্জিন কেবলমাত্র সেই জিনিসগুলিকেই লোড করে যা আমরা অনুসন্ধান করছি অন্যান্য প্রবেশ বা সংগ্রহগুলি নয়।
একমাত্র সন্তানের জন্য ডিফল্ট লোডিং সূচনা দ্বারা অলস = "মিথ্যা" উল্লেখ করা lazy.in সত্য যে পিতামাতাই লোড হচ্ছে সন্তানের পক্ষে সমর্থন করে না
অলস সেটিংটি প্যারেন্ট অবজেক্টটি লোড করার সময় চাইল্ড অবজেক্টগুলি লোড করতে হবে কিনা তা স্থির করে। আপনার পিতামাত্ত শ্রেণীর হাইবারনেট ম্যাপিং ফাইলটি এই সেটিংটি করতে হবে az অলস = সত্য (অর্থ শিশুটি লোড করবেন না) ডিফল্টরূপে শিশু বস্তুর অলস লোডিং সত্য is ।
আশ্চর্যজনকভাবে, উত্তরের কোনওটি পর্দার আড়ালে হাইবারনেট দ্বারা কীভাবে এটি অর্জন করা হয় তা নিয়ে কথা বলে না।
অলস লোডিং এমন একটি ডিজাইনের প্যাটার্ন যা কার্যকরভাবে দক্ষতার কারণে হাইবারনেটে ব্যবহৃত হয় যা নিম্নলিখিত কৌশলগুলি জড়িত।
1. বাইট কোড উপকরণ :
সেই সত্তা অবজেক্টটিতে সমস্ত কলকে বাধা দিতে হাইবারনেট হুকের সাথে বেস শ্রেণীর সংজ্ঞাটি বাড়ায় ।
সংকলনের সময় হয়ে গেছে বা চালিত করুন [লোড] সময়
1.1 সময় সঙ্কলন
সংকলন সময় অপারেশন পোস্ট করুন
বেশিরভাগ ক্ষেত্রে ম্যাভেন / পিঁপড়া প্লাগইন দ্বারা
1.2 রান সময়
হাইবারনেট যে রিটার্নটি দেয় তা হ'ল আসল টাইপের প্রক্সি।
আরও দেখুন: জাভাসিস্ট। মূল ধারণাটি কী এবং আসল ব্যবহার কোথায়?