জেপিএ এবং হাইবারনেট ব্যবহার করার সময় আইডি জেনারেশন কৌশলটি কীভাবে চয়ন করবেন


102

আমি হাইবারনেট রেফারেন্স গাইড এবং "হাইবারনেটের সাথে জাভা জেদ" আইডি প্রজন্মের বিভাগটি দিয়ে যাচ্ছিলাম

হাইবারনেট এবং জেপিএ মিলিত বেশ কয়েকটি বিকল্প রয়েছে।

আমি নির্দিষ্ট আইডি প্রজন্মের কৌশল কীভাবে চয়ন করতে পারি তার জন্য আরও একটি ডকুমেন্টেশন খুঁজছিলাম।

আমি টিপিং পয়েন্টও খুঁজছি।

উদাহরণস্বরূপ, হিলো কৌশলটি বিতর্ককে হ্রাস করবে। আমি ধরে নিচ্ছি যে এই পছন্দটির সাথে অবশ্যই কোনও বাণিজ্য বন্ধ রয়েছে।

আমি বাণিজ্য বন্ধ সম্পর্কে শিক্ষিত হতে চাই।

কোন সাহিত্য আছে কি?

উত্তর:


92

এপিআই ডক এই খুব স্পষ্ট।

সমস্ত জেনারেটর org.hibernate.id.IdentifierGenerator ইন্টারফেস প্রয়োগ করে। এটি একটি খুব সহজ ইন্টারফেস। কিছু অ্যাপ্লিকেশন তাদের নিজস্ব বিশেষায়িত প্রয়োগকরণ সরবরাহ করতে বেছে নিতে পারে তবে হাইবারনেট অন্তর্নির্মিত বাস্তবায়নগুলির একটি পরিসর সরবরাহ করে। অন্তর্নির্মিত জেনারেটরের শর্টকাটের নামগুলি নিম্নরূপ:

বৃদ্ধি

দীর্ঘ, সংক্ষিপ্ত বা প্রকারের সনাক্তকারী তৈরি করে যখন অনন্য তখনই অন্য কোনও প্রক্রিয়া একই টেবিলে ডেটা inোকায় না। একটি গুচ্ছ ব্যবহার করবেন না।

পরিচয়

ডিবি 2, মাইএসকিউএল, এমএস এসকিউএল সার্ভার, সিবাস এবং হাইপারসোনিক এসকিউএলে সনাক্তকরণ কলামগুলি সমর্থন করে। ফিরে পাওয়া শনাক্তকারী দীর্ঘ, সংক্ষিপ্ত বা প্রকারের।

ক্রম

ডিবি 2, পোস্টগ্রেএসকিউএল, ওরাকল, এসএপি ডিবি, ম্যাককোই বা ইন্টারবাসে একটি জেনারেটরে একটি ক্রম ব্যবহার করে। ফিরে পাওয়া শনাক্তকারী দীর্ঘ, সংক্ষিপ্ত বা প্রকারের

হিলো

উচ্চ মানগুলির উত্স হিসাবে একটি সারণী এবং কলাম (যথাক্রমে হাইবারনেট_উনিক_কি এবং নেক্সট_হী অনুসারে) লম্বা, সংক্ষিপ্ত বা প্রকারের প্রকারের সনাক্তকারী কার্যকরভাবে উত্পাদন করতে একটি হাই / লো অ্যালগরিদম ব্যবহার করে। হাই / লো অ্যালগরিদম সনাক্তকারী উত্পন্ন করে যা কেবলমাত্র একটি নির্দিষ্ট ডাটাবেসের জন্য অনন্য।

seqhilo

একটি নামী ডাটাবেস ক্রম দেওয়া লম্বা, সংক্ষিপ্ত বা ইন্টি প্রকারের সনাক্তকারী কার্যকরভাবে তৈরি করতে একটি হাই / লো অ্যালগরিদম ব্যবহার করে।

UUID

কোনও নেটওয়ার্কের মধ্যে স্বতন্ত্র এমন টাইপ স্ট্রিংয়ের সনাক্তকারী তৈরি করতে একটি 128-বিট ইউআইডি অ্যালগরিদম ব্যবহার করে (আইপি ঠিকানা ব্যবহার করা হয়)। ইউইউডিটি দৈর্ঘ্যে 32 হেক্সাডেসিমাল ডিজিটের স্ট্রিং হিসাবে এনকোড।

GUID

এমএস এসকিউএল সার্ভার এবং মাইএসকিউএল-তে একটি ডাটাবেস-উত্পাদিত জিইউইডি স্ট্রিং ব্যবহার করে।

স্থানীয়

অন্তর্নিহিত ডাটাবেসের দক্ষতার উপর নির্ভর করে পরিচয়, অনুক্রম বা হিলো নির্বাচন করে।

নির্ধারিত

অ্যাপ্লিকেশনটিকে সেভ () বলা হওয়ার আগে বস্তুর কাছে একটি সনাক্তকারী নির্ধারণ করতে দেয়। কোনও উপাদান নির্দিষ্ট না করা থাকলে এটি ডিফল্ট কৌশল।

নির্বাচন করা

কোনও অনন্য কী দ্বারা সারিটি নির্বাচন করে এবং প্রাথমিক কী মানটি পুনরুদ্ধার করে একটি ডাটাবেস ট্রিগার দ্বারা নির্ধারিত একটি প্রাথমিক কী পুনরুদ্ধার করে।

বিদেশী

অন্য একটি সম্পর্কিত বস্তুর সনাক্তকারী ব্যবহার করে। এটি সাধারণত একটি প্রাথমিক কী সমিতির সাথে একত্রে ব্যবহৃত হয়।

ক্রম পরিচয়

সুনির্দিষ্ট সিকোয়েন্স জেনারেশন কৌশল যা প্রকৃত মান উত্পন্নকরণের জন্য একটি ডাটাবেস ক্রম ব্যবহার করে তবে সন্নিবেশ বিবৃতি কার্যকরকরণের অংশ হিসাবে উত্পন্ন সনাক্তকারী মানটি ফেরত দিতে জেডিবিসি 3 getGeneratedKeys এর সাথে এটি একত্রিত করে। এই কৌশলটি কেবল জেডিকে 1.4-এর জন্য লক্ষ্যযুক্ত ওরাकल 10 জি ড্রাইভারগুলিতে সমর্থিত। এই সন্নিবেশ বিবৃতিতে মন্তব্যগুলি ওরাকল ড্রাইভারগুলির মধ্যে একটি বাগের কারণে অক্ষম করা আছে।

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

আপনি নির্বাচন করা উচিত ক্রম বা GUID আপনার ডাটাবেস উপর নির্ভর করে। এগুলি নিরাপদ এবং আরও ভাল কারণ idপ্রজন্মটি ডাটাবেসের ভিতরেই ঘটবে।

আপডেট: সাম্প্রতিককালে আমাদের আদর্শের সাথে একটি সমস্যা হয়েছিল যেখানে আদিম প্রকার (ইন্ট) এর পরিবর্তে ওয়ার্পার টাইপ (পূর্ণসংখ্যা) ব্যবহার করে এটি স্থির করা হয়েছিল।


আপনার প্রতিক্রিয়ার জন্য আপনাকে অনেক ধন্যবাদ। আমি ইতিমধ্যে দস্তাবেজের দিকে নজর রেখেছি। তবে লোকেরা কেন হিলো এবং সেখিলোর মতো কিছু ব্যবহার করবে তা আমি সন্ধান করছি। আমরা কখন এই পছন্দটি করি না। নির্বাচনের জন্য ব্যবহারের ক্ষেত্রে কী কী রয়েছে।

যখন সিক্যুয়েন্স বা গাইডের মতো সোজা কিছু থাকে, তখন বিকাশকারীকে অন্যান্য উপায়গুলি বেছে নেওয়ার জন্য কী প্রয়োজন।

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

হ্যাঁ। এখনও অবধি আমার উজ্জীবিত হওয়া বা গ্রহণ করার সুযোগ ছিল না।

আমি আরও বিশদে ডাইভিংয়ের দিকে তাকিয়ে আছি, যদি আপনার কাছে সময় থাকে তবে আমাকে জানান।

45

মূলত, আপনার দুটি প্রধান পছন্দ রয়েছে:

  • আপনি নিজে সনাক্তকারী তৈরি করতে পারেন, সেক্ষেত্রে আপনি একটি নির্ধারিত শনাক্তকারী ব্যবহার করতে পারেন ।
  • আপনি @GeneratedValueটীকাটি ব্যবহার করতে পারেন এবং হাইবারনেট আপনাকে সনাক্তকারী নির্ধারণ করবে।

উত্পাদিত শনাক্তকারীদের জন্য আপনার কাছে দুটি বিকল্প রয়েছে:

সংখ্যাগত শনাক্তকারীদের জন্য আপনার কাছে তিনটি বিকল্প রয়েছে :

  • পরিচয়কে
  • ক্রম
  • সারণী

পরিচয়টি কেবলমাত্র তখনই ভাল পছন্দ যখন আপনি SEQUENCE (যেমন মাইএসকিউএল) ব্যবহার করতে পারবেন না কারণ এটি জেডিবিসি ব্যাচ আপডেটগুলি অক্ষম করে

SEQUENCE পছন্দসই বিকল্প, বিশেষত যখন সনাক্তকারী অপ্টিমাইজারের মতো ব্যবহৃত হয় পুল বা পোল্ড-লো এর

টেবিলটি যে কোনও মূল্যে এড়ানো উচিত কারণ এটি সনাক্তকারী এবং সারি-স্তরের লকগুলি খারাপভাবে স্কেল করে তা আনার জন্য একটি পৃথক লেনদেন ব্যবহার করে।


20


কিছুক্ষণ আগে হাইবারনেট কী জেনারেটর সম্পর্কে আমি একটি বিস্তারিত নিবন্ধ লিখেছিলাম: http://blog.eyallupu.com/2011/01/hibernatejpa-identity-generators.html

সঠিক জেনারেটর নির্বাচন করা একটি জটিল কাজ তবে চেষ্টা করা এবং যত তাড়াতাড়ি সম্ভব এটি ঠিক করা গুরুত্বপূর্ণ - দেরীতে মাইগ্রেশন দুঃস্বপ্ন হতে পারে।

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


2

আমি এই লেকচারটি খুব মূল্যবান https://vimeo.com/190275665 পেয়েছি , পয়েন্ট 3 এ এটি এই জেনারেটরগুলির সংক্ষিপ্তসার জানায় এবং আপনি প্রতিটি ব্যবহার করার সময় কিছু কার্যকারিতা বিশ্লেষণ এবং গাইডলাইন দেয়।


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