হাইবারনেটে এক-এক-এক, একাধিক-ও-এক এবং এক-একের জন্য ডিফল্ট আনার ধরণ


103

হাইবারনেট ম্যাপিংয়ের ডিফল্ট আনার ধরণটি কী?

অন্বেষণের পরে আমি যা জানতে পারি তা হ'ল:

  • এক থেকে এক জন্য এটি আগ্রহী
  • এক থেকে অনেকের জন্য এটি অলস

তবে এটি অ্যালিপসে পরীক্ষা করার পরে, এটি সবার জন্য আগ্রহী ছিল।

এটি আমি জেপিএ বা হাইবারনেট ব্যবহার করছি কিনা তার উপর নির্ভর করে?


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

উত্তর:


193

এটি আপনি জেপিএ বা হাইবারনেট ব্যবহার করছেন কিনা তার উপর নির্ভর করে।

JPA 2.0 স্পেস থেকে, খেলাপিগুলি হ'ল :

OneToMany: LAZY
ManyToOne: EAGER
ManyToMany: LAZY
OneToOne: EAGER

হাইবারনেটে সবই অলস

হালনাগাদ:

হাইবারনেটের সর্বশেষতম সংস্করণ উপরের জেপিএ ডিফল্টগুলির সাথে সামঞ্জস্য করে।


11
"এবং হাইবারনেটে, সমস্ত অলস" স্পষ্টতই এটি সাম্প্রতিক সংস্করণগুলিতে পরিবর্তিত হয়েছে। দয়া করে দেখুন নিচের আলেকজান্ডার Rühl এর উত্তর
দিনাই

1
হাইবারনেট হ'ল জেপিএ বাস্তবায়নগুলির মধ্যে একটি, সুতরাং একবার আপনি হাইবারনেট ব্যবহার করার পরে, আপনি জেপিএ ব্যবহার করছেন :)
xenteros

এটি একটি জনপ্রিয় ক্যোয়ারী। @ আশিষ আগরওয়াল আপনি কি আপনার উত্তরের শেষ লাইনটি আপডেট করতে পারেন? হাইবারনেটে এটি এখনকার জন্য অলস নয়।
সৌরভ তিওয়ারি

সর্বশেষ হাইবারনেট আচরণের সাথে পোস্টটি আপডেট করেছে।
এম আনৌতি

একটি আপডেট ছিল, দাবি করে যে প্রতি ম্যাপিংয়ের জন্য উত্সাহিতটি ডিফল্ট আনার ধরণ, যা বর্তমান 5.x এবং নতুন 6.x হাইবারনেট ডকুমেন্টেশনে উভয়ই অধ্যায় 11.3 দ্বারা প্রত্যাখ্যান করা হয়েছে, তাই আমি সম্পাদনাটি বাতিল করে দিয়েছি। এছাড়াও, স্বয়ংক্রিয় উত্সাহ না রাখার প্রস্তাবের পরিপন্থী, যেহেতু এর অর্থ সম্ভবত কোনও একক বস্তু আনার সময় পুরো ডাটাবেসটি নির্বাচন করা উচিত।
আলেকজান্ডার রোহল

51

আমি জানি প্রশ্নটি জিজ্ঞাসা করার সময় উত্তরগুলি সঠিক ছিল - তবে যেহেতু লোকেরা (আমার মতো এই মুহুর্তে) এখনও তাদের ভেবে দেখা পাচ্ছে যে তাদের ওয়াইল্ডফ্লাই 10 কেন অন্যরকম আচরণ করছে, আমি বর্তমান হাইবারনেট 5 এর জন্য একটি আপডেট দিতে চাই .x সংস্করণ:

ইন হাইবারনেট 5.2 ইউজার গাইড এটা অধ্যায়ে বলা 11.2। আনার কৌশল প্রয়োগ করা :

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

তাই হাইবারনেট জেপিএর জন্য উপরে বর্ণিত আশীষ আগরওয়ালের মতো আচরণ করে:

OneToMany: LAZY
ManyToOne: EAGER
ManyToMany: LAZY
OneToOne: EAGER

( JPA 2.1 স্পেস দেখুন )


এবং যদি আমরা JPA ইমপ্লের পরিবর্তে নেটিভ হাইবারনেট ব্যবহার করি তবে কী এটি একইভাবে কাজ করবে?
jMounir

@ জেমনউর: আচ্ছা, আমি এটি চেষ্টা করি নি, তবে যেহেতু হাইবারনেট বলেছে যে এটি জেপিএ-তে সংজ্ঞায়িত মতো আচরণ করে, তাই হাইবারনেটকে নিজের জন্য ব্যবহার করার সময় কেন এটি আলাদা হতে পারে তা আমি দেখতে পাই না। উভয় ক্ষেত্রেই কোনও ডিফল্ট কৌশলকে ওভাররাইড করতে পারে।
আলেকজান্ডার রুহল

15

আপনার প্রশ্নের উত্তর দেওয়ার জন্য, হাইবারনেট হ'ল জেপিএ মান বাস্তবায়ন an হাইবারনেটের নিজস্ব ক্রিয়াকলাপ রয়েছে তবে হাইবারনেট ডক্স অনুসারে

ডিফল্টরূপে, হাইবারনেট সংগ্রহের জন্য অলস নির্বাচন সংগ্রহ এবং একক-মূল্যবান সংঘের জন্য অলস প্রক্সি আনতে ব্যবহার করে ching এই ডিফল্ট সংখ্যাগরিষ্ঠ অ্যাপ্লিকেশনগুলিতে বেশিরভাগ সংঘের জন্য অর্থবোধ করে।

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

এটি বোঝা উচিত যে হাইবারনেট কেবলমাত্র এই বিষয়গুলিকে মানগুলি পূরণ করার চেষ্টা করবে যখন আপনি নির্দিষ্ট না করে অবধি অ্যাক্সেসটি অ্যাক্সেস করার চেষ্টা করবেন fetchType.EAGER


0

একক মূল্যবান সংঘের জন্য, যেমন- ওয়ান-টু-ওয়ান এবং বহু-এক-এক: -
ডিফল্ট অলস = প্রক্সি
প্রক্সি অলস লোডিং : - এটি বোঝায় যে আপনার সম্পর্কিত সত্তার একটি প্রক্সি অবজেক্ট লোড হয়েছে is এর অর্থ হ'ল দুটি সত্ত্বাকে সংযুক্তকারী কেবলমাত্র আইডিটি সংশ্লিষ্ট সত্তার প্রক্সি অবজেক্টের জন্য লোড করা হয়েছে।
উদাহরণস্বরূপ: এ এবং বি দুটি থেকে এক সংস্থার সাথে সত্ত্বা। অর্থাত্: প্রতিটি বিয়ের জন্য একাধিক এ থাকতে পারে এ এর ​​প্রতিটি বস্তুতে বি of এর একটি রেফারেন্স থাকবে
`

public class A{
    int aid;
    //some other A parameters;
    B b;
}
public class B{
    int bid;
     //some other B parameters;
}

`
সম্পর্ক কলাম উপস্থিত থাকবে (এইড, বিড ... সত্তা একটি অন্য কলাম)।
সম্পর্কের বিতে কলামগুলি থাকবে (বিড, ... সত্তা খ এর অন্যান্য কলাম)

বিযুক্ত করা হবে তখন প্রক্সিটি বোঝায় যে কেবল আই আইটি আনা হবে এবং বি এর একটি প্রক্সি অবজেক্টে সংরক্ষণ করা হবে যার মধ্যে কেবল আইডি রয়েছে। বি এর প্রক্সি অবজেক্টটি প্রক্সি-শ্রেণীর একটি অবজেক্ট যা কেবল সর্বনিম্ন ক্ষেত্রগুলির সাথে বি এর একটি সাবক্লাস। যেহেতু বিড ইতিমধ্যে সম্পর্কের অংশ, তাই সম্পর্কের কাছ থেকে বিড পাওয়ার জন্য কোনও জিজ্ঞাসা চালানোর প্রয়োজন নেই বি সত্তা বি এর অন্যান্য বৈশিষ্ট্যগুলি কেবল যখন বিড ব্যতীত অন্য ক্ষেত্রটিতে প্রবেশ করা হয় তখন অলসভাবে লোড করা হয় are

সংগ্রহের জন্য, যেমন-বহু-থেকে-বহু এবং এক থেকে বহু: -
ডিফল্ট অলস = সত্য


দয়া করে নোট করুন যে আনার কৌশলটি (নির্বাচন করুন, যোগ দিন ইত্যাদি) অলসাকে ওভাররাইড করতে পারে। অর্থাত্: যদি অলস = 'সত্য' এবং আনতে = 'যোগ' হয় তবে এ-এর আনাও বি বা বিএস সংগ্রহ করতে পারে (সংগ্রহের ক্ষেত্রে)। আপনি যদি এটি সম্পর্কে চিন্তা করেন তবে আপনি কারণটি পেতে পারেন।
একক মূল্যবান সংঘের জন্য ডিফল্ট আনতে "যোগ দিন"।
সংগ্রহের জন্য ডিফল্ট আনয়ন "নির্বাচন করুন"। শেষ দুটি লাইন যাচাই করুন। আমি এটি যৌক্তিকভাবে ছাড় করেছি।

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