হাইবারনেট এবং স্প্রিং ডেটা জেপিএর মধ্যে প্রধান পার্থক্যগুলি কী কী? কখন আমাদের হাইবারনেট বা স্প্রিং ডেটা জেপিএ ব্যবহার করা উচিত নয়? এছাড়াও, যখন স্প্রিং জেডিবিসি টেমপ্লেট হাইবারনেট / স্প্রিং ডেটা জেপিএর চেয়ে আরও ভাল পারফর্ম করতে পারে?
হাইবারনেট এবং স্প্রিং ডেটা জেপিএর মধ্যে প্রধান পার্থক্যগুলি কী কী? কখন আমাদের হাইবারনেট বা স্প্রিং ডেটা জেপিএ ব্যবহার করা উচিত নয়? এছাড়াও, যখন স্প্রিং জেডিবিসি টেমপ্লেট হাইবারনেট / স্প্রিং ডেটা জেপিএর চেয়ে আরও ভাল পারফর্ম করতে পারে?
উত্তর:
হাইবারনেট একটি জেপিএ বাস্তবায়ন, যখন স্প্রিং ডেটা জেপিএ একটি জেপিএ ডেটা অ্যাক্সেস বিমূর্ততা। স্প্রিং ডেটা জেপিএ কোনও জেপিএ সরবরাহকারী ছাড়া কাজ করতে পারে না।
স্প্রিং ডেটা ডিডিডি Repository
প্যাটার্ন বা উত্তরাধিকারী GenericDao
কাস্টম প্রয়োগের সমাধান সরবরাহ করে। এটি পদ্ধতি নাম কনভেনশনের মাধ্যমে আপনার পক্ষ থেকে জেপিএ প্রশ্নগুলিও উত্পন্ন করতে পারে।
স্প্রিং ডেটা সহ, আপনি হাইবারনেট, এক্সলিপস লিঙ্ক বা অন্য কোনও জেপিএ সরবরাহকারী ব্যবহার করতে পারেন। স্প্রিং বা জাভা ইই ব্যবহার করার একটি খুব আকর্ষণীয় সুবিধা হ'ল আপনি @Transactional
টীকাটি ব্যবহার করে ঘোষণামূলকভাবে লেনদেনের সীমানা নিয়ন্ত্রণ করতে পারেন ।
স্প্রিং জেডিবিসি অনেক বেশি স্বল্প ওজনের, এবং এটি দেশীয় অনুসন্ধানের উদ্দেশ্যে এবং যদি আপনি কেবল জেডিবিসিকেই ব্যবহার করতে চান, তবে আপনি জেডিবিসি ভার্বোসটি মোকাবেলা করার জন্য স্প্রিং জেডিবিসি ব্যবহার করা ভাল।
সুতরাং, হাইবারনেট এবং স্প্রিং ডেটা প্রতিযোগীদের চেয়ে পরিপূরক।
এখানে আমরা তিনটি ভিন্ন জিনিস ব্যবহার করছি:
সুতরাং স্প্রিং ডেটা জেপিএ এবং স্প্রিং + হাইবারনেট কীভাবে কাজ করে তা বুঝতে দেয়-
ধরা যাক আপনি আপনার অ্যাপ্লিকেশনটির জন্য বসন্ত + হাইবারনেট ব্যবহার করছেন। হাইওবারনেটের সেশনফ্যাক্টরি ব্যবহার করে এখন আপনার দাউ ইন্টারফেস এবং বাস্তবায়ন হওয়া দরকার যেখানে আপনি ক্রড অপারেশন লিখবেন। ধরা যাক আপনি কর্মচারী ক্লাসের জন্য দাও ক্লাস লিখছেন, আগামীকাল আপনার আবেদনে আপনাকে অন্য কোনও সত্তার জন্য একই রকম ক্রড অপারেশন লেখার প্রয়োজন হতে পারে। সুতরাং এখানে প্রচুর বয়লারপ্লেট কোড রয়েছে।
এখন স্প্রিং ডেটা জেপা আমাদের রেওপিটরিগুলি (ক্রুড্রেপোসিটরি, জেপারেপোসিটরি) প্রসারিত করে দাও ইন্টারফেসগুলি সংজ্ঞায়িত করার অনুমতি দেয় যাতে এটি রানওটাইমে আপনাকে দাও বাস্তবায়ন সরবরাহ করে। আপনাকে আর দাও বাস্তবায়ন লেখার দরকার নেই hats স্প্রিং ডেটা জেপিএ কীভাবে আপনার জীবনকে সহজ করে তোলে।
আমি স্প্রিংজেপিএ অসম্মতি জানাই সহজতর। হ্যাঁ, এটি কিছু ক্লাস সরবরাহ করে এবং আপনি কিছু সাধারণ ডিএও দ্রুত তৈরি করতে পারেন তবে বাস্তবে এটি আপনি যা করতে পারেন তা সব। আপনি যদি FindById () বা সংরক্ষণের চেয়ে আরও কিছু করতে চান তবে আপনাকে অবশ্যই জাহান্নামের মধ্য দিয়ে যেতে হবে:
কেন নিজের লেনদেন পরিচালনার অসুবিধা? যেহেতু জাভা ১.৮ ডিফল্ট পদ্ধতিগুলিকে ইন্টারফেসগুলিতে মঞ্জুরি দেয়, স্প্রিং টীকা ভিত্তিক লেনদেনগুলি সহজ কাজ করে না।
দুর্ভাগ্যক্রমে, স্প্রিংজেপিএ প্রতিবিম্বের উপর ভিত্তি করে, এবং কখনও কখনও আপনাকে কোনও পদ্ধতির নাম বা সত্তার প্যাকেজটি টীকাতে চিহ্নিত করতে হয় (!)। যে কারণে কোনও রিফ্যাক্টরিং বড় ক্র্যাশ করে। দুঃখের বিষয়, @ লেনদেন কেবল প্রাথমিক ডিএসের জন্য কাজ করে :( সুতরাং, আপনার যদি একাধিক ডেটাসোর্স থাকে তবে মনে রাখবেন - লেনদেন কেবল প্রাথমিকের জন্য কাজ করে :)
হাইবারনেট এবং স্প্রিং ডেটা জেপিএর মধ্যে প্রধান পার্থক্যগুলি কী কী?
হাইবারনেট হ'ল জেপিএ তুলনামূলক, স্প্রিংজেপিএ স্প্রিং তুলনামূলক b আপনার হাইবারনেটজেপিএ ডিএও জাভা বা হাইবারনেট স্ট্যান্ডেলোন দিয়ে ব্যবহার করা যেতে পারে, যখন স্প্রিংজেপিএ বসন্তের মধ্যে ব্যবহার করা যায় - উদাহরণস্বরূপ স্প্রিংবুট
কখন আমাদের হাইবারনেট বা স্প্রিং ডেটা জেপিএ ব্যবহার করা উচিত নয়? এছাড়াও, যখন স্প্রিং জেডিবিসি টেমপ্লেট হাইবারনেট / স্প্রিং ডেটা জেপিএর চেয়ে আরও ভাল পারফর্ম করতে পারে?
যখন আপনাকে অনেক বেশি যোগদান করতে হবে বা যখন আপনার একাধিক ডাটাসোর্স সংযোগ থাকা স্প্রিং ব্যবহার করতে হবে তখনই স্প্রিং জেডিবিসি ব্যবহার করুন। সাধারণত, যোগদানের জন্য জেপিএ এড়িয়ে চলুন।
তবে আমার সাধারণ পরামর্শ, তাজা সমাধান ব্যবহার করুন — দাওবাব ( http://www.daobab.io )। দাওবাব আমার জাভা এবং যে কোনও জেপিএ ইঞ্জিন সংহতকারী এবং আমি বিশ্বাস করি এটি আপনার কার্যগুলিতে অনেক সাহায্য করবে :)
Spring Data
এর উপরে অবস্থিত একটি সুবিধাজনক লাইব্রেরি হ'ল JPA
অনেক কিছু দূরে সরিয়ে দেয় এবং স্প্রিং ম্যাজিককে (এটি পছন্দ করুন বা না) স্থিরতার স্টোর অ্যাক্সেসে নিয়ে আসে। এটি মূলত রিলেশনাল ডাটাবেসগুলির সাথে কাজ করার জন্য ব্যবহৃত হয়। সংক্ষেপে, এটি আপনাকে এমন ইন্টারফেসগুলি ঘোষণার অনুমতি দেয় যার মতো পদ্ধতিগুলি findByNameOrderByAge(String name);
রানটাইমে পার্স করা এবং উপযুক্ত রূপান্তরিত হবেJPA
প্রশ্নের ।
এর শীর্ষে JPA
স্থাপনার জন্য এটি লোভনীয় করে তোলে:
রুকি বিকাশকারীরা যারা SQL
এটি খারাপভাবে জানেন না বা জানেন না। এটি বিপর্যয়ের একটি রেসিপি তবে প্রকল্পটি যদি তুচ্ছ হয় তবে তারা এগুলি থেকে সরে যেতে পারে।
অভিজ্ঞ ইঞ্জিনিয়াররা যারা জানেন তারা কীভাবে কাজগুলিকে দ্রুত ছড়িয়ে দিতে চান। এটি কার্যকর একটি কৌশল হতে পারে (তবে আরও পড়ুন)।
আমার অভিজ্ঞতা থেকে Spring Data
, এর যাদুটি খুব বেশি (এটি Spring
সাধারণভাবে প্রযোজ্য )। আমি এটি একটি প্রকল্পে ভারীভাবে ব্যবহার করা শুরু করেছি এবং শেষ পর্যন্ত বেশ কয়েকটি কোণে আঘাত করেছি যেখানে আমি লাইব্রেরিটি আমার পথ থেকে সরিয়ে ফেলতে পারি না এবং কুৎসিত কাজের দিক দিয়ে শেষ করি। পরে আমি অন্যান্য ব্যবহারকারীর অভিযোগ পড়েছি এবং বুঝতে পারি যে এই সমস্যাগুলি সাধারণত Spring Data
। উদাহরণস্বরূপ, এই সমস্যাটি পরীক্ষা করুন যা ঘন্টাগুলি তদন্ত / শপথ গ্রহণের দিকে পরিচালিত করে:
public TourAccommodationRate createTourAccommodationRate(
@RequestBody TourAccommodationRate tourAccommodationRate
) {
if (tourAccommodationRate.getId() != null) {
throw new BadRequestException("id MUST NOT be specified in a body during entry creation");
}
// This is an ugly hack required for the Room slim model to work. The problem stems from the fact that
// when we send a child entity having the many-to-many (M:N) relation to the containing entity, its
// information is not fetched. As a result, we get NPEs when trying to access all but its Id in the
// code creating the corresponding slim model. By detaching the entity from the persistence context we
// force the ORM to re-fetch it from the database instead of taking it from the cache
tourAccommodationRateRepository.save(tourAccommodationRate);
entityManager.detach(tourAccommodationRate);
return tourAccommodationRateRepository.findOne(tourAccommodationRate.getId());
}
আমি নীচের স্তরে গিয়ে শেষ করে ব্যবহার শুরু করেছি JDBI
- আপনাকে বয়লারপ্লেট থেকে বাঁচানোর জন্য পর্যাপ্ত "জাদু" সহ একটি দুর্দান্ত লাইব্রেরি। এটির সাহায্যে আপনার এসকিউএল অনুসন্ধানগুলির উপর সম্পূর্ণ নিয়ন্ত্রণ রয়েছে এবং প্রায় কখনও কখনও লাইব্রেরির সাথে লড়াই করতে হয় না।
হাইবারনেট হ'ল "জেপিএ" বাস্তবায়ন যা ডাটাবেসে জাভা অবজেক্টের জন্য একটি স্পেসিফিকেশন।
আমি আর্ট জেপিএ ব্যবহার করার পরামর্শ দেব কারণ আপনি বিভিন্ন ওআরএমএসের মধ্যে স্যুইচ করতে পারেন।
আপনি যখন জেডিবিসি ব্যবহার করেন তখন আপনার এসকিউএল কোয়েরিগুলি ব্যবহার করা দরকার, সুতরাং আপনি যদি এসকিউএল বিষয়ে দক্ষ হন তবে জেডিবিসি-তে যান।
আপনি যদি এসকিউএল কোয়েরিতে সরলতা এবং আরও নিয়ন্ত্রণ পছন্দ করেন তবে আমি স্প্রিং ডেটা / স্প্রিং জেডিবিসি-র সাথে যেতে পরামর্শ দেব।
এর ভাল পরিমাণে জেপিএ শেখার বক্ররেখা এবং কখনও কখনও সমস্যাগুলি ডিবাগ করা কঠিন। অন্যদিকে, এসকিউএল-এর উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ থাকলেও ক্যোয়ারী অনুকূলিতকরণ এবং কার্যকারিতা উন্নত করা আরও সহজ হয়ে যায়। আপনি সহজেই আপনার এসকিউএল ডিবিএ বা ডেটাবেস সম্পর্কে আরও ভাল বোঝার সাথে কারও সাথে ভাগ করতে পারেন।