হাইবারনেট এবং স্প্রিং ডেটা জেপিএর মধ্যে পার্থক্য কী


207

হাইবারনেট এবং স্প্রিং ডেটা জেপিএর মধ্যে প্রধান পার্থক্যগুলি কী কী? কখন আমাদের হাইবারনেট বা স্প্রিং ডেটা জেপিএ ব্যবহার করা উচিত নয়? এছাড়াও, যখন স্প্রিং জেডিবিসি টেমপ্লেট হাইবারনেট / স্প্রিং ডেটা জেপিএর চেয়ে আরও ভাল পারফর্ম করতে পারে?


7
@ নীল স্টকটন দুটি প্রযুক্তির মধ্যে তুলনা চেয়ে জিজ্ঞাসা করছেন না।
ফিলিপ রেগো

উত্তর:


262

হাইবারনেট একটি জেপিএ বাস্তবায়ন, যখন স্প্রিং ডেটা জেপিএ একটি জেপিএ ডেটা অ্যাক্সেস বিমূর্ততা। স্প্রিং ডেটা জেপিএ কোনও জেপিএ সরবরাহকারী ছাড়া কাজ করতে পারে না।

স্প্রিং ডেটা ডিডিডি Repositoryপ্যাটার্ন বা উত্তরাধিকারী GenericDaoকাস্টম প্রয়োগের সমাধান সরবরাহ করে। এটি পদ্ধতি নাম কনভেনশনের মাধ্যমে আপনার পক্ষ থেকে জেপিএ প্রশ্নগুলিও উত্পন্ন করতে পারে।

স্প্রিং ডেটা সহ, আপনি হাইবারনেট, এক্সলিপস লিঙ্ক বা অন্য কোনও জেপিএ সরবরাহকারী ব্যবহার করতে পারেন। স্প্রিং বা জাভা ইই ব্যবহার করার একটি খুব আকর্ষণীয় সুবিধা হ'ল আপনি @Transactionalটীকাটি ব্যবহার করে ঘোষণামূলকভাবে লেনদেনের সীমানা নিয়ন্ত্রণ করতে পারেন

স্প্রিং জেডিবিসি অনেক বেশি স্বল্প ওজনের, এবং এটি দেশীয় অনুসন্ধানের উদ্দেশ্যে এবং যদি আপনি কেবল জেডিবিসিকেই ব্যবহার করতে চান, তবে আপনি জেডিবিসি ভার্বোসটি মোকাবেলা করার জন্য স্প্রিং জেডিবিসি ব্যবহার করা ভাল।

সুতরাং, হাইবারনেট এবং স্প্রিং ডেটা প্রতিযোগীদের চেয়ে পরিপূরক।


52
তাহলে এর অর্থ কি স্প্রিং ডেটা জেপিএ নিজের অস্তিত্ব রাখতে পারে না? এটি হুডের নীচে, এটি জেপিএ সরবরাহকারীদের (যেমন হাইবারনেট, এক্লিপসেলিংক বা অন্য কোনও জেপিএ সরবরাহকারী) ব্যবহার করে?
কৌতূহলীমাংশ

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

1
আরও স্পষ্টভাবে, এখন পর্যন্ত সবকিছু ঠিকঠাক কাজ করে আপনার শীর্ষ স্তরের অর্থাত্ স্প্রিং ডেটা জেপিএ বুঝতে হবে। প্রথম ব্যতিক্রম সহ আপনাকে নিম্ন স্তরের অর্থাত্ হাইবারনেট, জেডিবিসি এবং ডাটাবেসগুলি জানতে হবে।
মারমাইট বোম্বার

138

এখানে আমরা তিনটি ভিন্ন জিনিস ব্যবহার করছি:

  1. জেপিএ: জাভা অধ্যবসায় এপিআই যা আপনার জাভা থেকে ডেটাবেসে সম্পর্কের জন্য অবজেক্টের ডেটা টিকিয়ে রাখতে, পড়তে এবং পরিচালনার জন্য স্পেসিফিকেশন সরবরাহ করে।
  2. হাইবারনেট: এমন বিভিন্ন প্রদানকারী রয়েছে যা জেপিএ প্রয়োগ করে। হাইবারনেট তাদের মধ্যে একটি। সুতরাং আমাদের পাশাপাশি অন্যান্য সরবরাহকারীও রয়েছে। তবে বসন্তের সাথে জেপিএ ব্যবহার করা হলে এটি আপনাকে ভবিষ্যতে বিভিন্ন সরবরাহকারীগুলিতে স্যুইচ করতে দেয়।
  3. স্প্রিং ডেটা জেপিএ: এটি জেপিএর শীর্ষে আরেকটি স্তর যা আপনার জীবনকে সহজ করার জন্য বসন্ত সরবরাহ করে।

সুতরাং স্প্রিং ডেটা জেপিএ এবং স্প্রিং + হাইবারনেট কীভাবে কাজ করে তা বুঝতে দেয়-


স্প্রিং ডেটা জেপিএ:

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

এখন স্প্রিং ডেটা জেপা আমাদের রেওপিটরিগুলি (ক্রুড্রেপোসিটরি, জেপারেপোসিটরি) প্রসারিত করে দাও ইন্টারফেসগুলি সংজ্ঞায়িত করার অনুমতি দেয় যাতে এটি রানওটাইমে আপনাকে দাও বাস্তবায়ন সরবরাহ করে। আপনাকে আর দাও বাস্তবায়ন লেখার দরকার নেই hats স্প্রিং ডেটা জেপিএ কীভাবে আপনার জীবনকে সহজ করে তোলে।


3
সুতরাং স্প্রিং ডেটা জেপিএ অন্তর্নিহিত বাস্তবায়ন কী, এটি হাইবারনেট? কারণ যখন আমি পেজিংএন্ডসোর্টিংরেপোজিটরি ব্যবহার করি তখন এটি কনসোলে হাইবারনেট লগগুলি দেখায়।
ভিকি

2
স্প্রিং ডেটা জেপিএ হাইড্রনেট বাস্তবায়ন ডিফল্টরূপে ব্যবহার করে .. আপনি যদি বসন্ত-বুট-স্টার্টার-ডেটা-
জেপির

28

আমি স্প্রিংজেপিএ অসম্মতি জানাই সহজতর। হ্যাঁ, এটি কিছু ক্লাস সরবরাহ করে এবং আপনি কিছু সাধারণ ডিএও দ্রুত তৈরি করতে পারেন তবে বাস্তবে এটি আপনি যা করতে পারেন তা সব। আপনি যদি FindById () বা সংরক্ষণের চেয়ে আরও কিছু করতে চান তবে আপনাকে অবশ্যই জাহান্নামের মধ্য দিয়ে যেতে হবে:

  • org.springframework.data.repository ক্লাসে কোন সত্ত্বা ম্যানেজার অ্যাক্সেস নেই (এটি বেসিক জেপিএ ক্লাস!)
  • নিজস্ব লেনদেন পরিচালনা (হাইবারনেট লেনদেন অনুমোদিত নয়)
  • একাধিক ডাটাসোর্স কনফিগারেশন নিয়ে বিশাল সমস্যা
  • কোনও ডেটাসোর্স পুলিং নেই (হিকারিসিপি অবশ্যই তৃতীয় পক্ষের লাইব্রেরি হিসাবে ব্যবহৃত হবে)

কেন নিজের লেনদেন পরিচালনার অসুবিধা? যেহেতু জাভা ১.৮ ডিফল্ট পদ্ধতিগুলিকে ইন্টারফেসগুলিতে মঞ্জুরি দেয়, স্প্রিং টীকা ভিত্তিক লেনদেনগুলি সহজ কাজ করে না।

দুর্ভাগ্যক্রমে, স্প্রিংজেপিএ প্রতিবিম্বের উপর ভিত্তি করে, এবং কখনও কখনও আপনাকে কোনও পদ্ধতির নাম বা সত্তার প্যাকেজটি টীকাতে চিহ্নিত করতে হয় (!)। যে কারণে কোনও রিফ্যাক্টরিং বড় ক্র্যাশ করে। দুঃখের বিষয়, @ লেনদেন কেবল প্রাথমিক ডিএসের জন্য কাজ করে :( সুতরাং, আপনার যদি একাধিক ডেটাসোর্স থাকে তবে মনে রাখবেন - লেনদেন কেবল প্রাথমিকের জন্য কাজ করে :)

হাইবারনেট এবং স্প্রিং ডেটা জেপিএর মধ্যে প্রধান পার্থক্যগুলি কী কী?

হাইবারনেট হ'ল জেপিএ তুলনামূলক, স্প্রিংজেপিএ স্প্রিং তুলনামূলক b আপনার হাইবারনেটজেপিএ ডিএও জাভা বা হাইবারনেট স্ট্যান্ডেলোন দিয়ে ব্যবহার করা যেতে পারে, যখন স্প্রিংজেপিএ বসন্তের মধ্যে ব্যবহার করা যায় - উদাহরণস্বরূপ স্প্রিংবুট

কখন আমাদের হাইবারনেট বা স্প্রিং ডেটা জেপিএ ব্যবহার করা উচিত নয়? এছাড়াও, যখন স্প্রিং জেডিবিসি টেমপ্লেট হাইবারনেট / স্প্রিং ডেটা জেপিএর চেয়ে আরও ভাল পারফর্ম করতে পারে?

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

তবে আমার সাধারণ পরামর্শ, তাজা সমাধান ব্যবহার করুন — দাওবাব ( http://www.daobab.io )। দাওবাব আমার জাভা এবং যে কোনও জেপিএ ইঞ্জিন সংহতকারী এবং আমি বিশ্বাস করি এটি আপনার কার্যগুলিতে অনেক সাহায্য করবে :)


2
দাওবাব, সত্যি? আপনি যদি jpql এর মতো ধরণের সুরক্ষা পছন্দ না করেন (আমি না), জেপিএতে একটি প্রকার নিরাপদ মানদণ্ড এপিআই থাকে ... স্ট্যান্ডার্ড জেপিএ সেই দুর্বল বিকল্পের চেয়ে ভাল।
ইয়ামাজোরস

8

Spring Dataএর উপরে অবস্থিত একটি সুবিধাজনক লাইব্রেরি হ'ল JPAঅনেক কিছু দূরে সরিয়ে দেয় এবং স্প্রিং ম্যাজিককে (এটি পছন্দ করুন বা না) স্থিরতার স্টোর অ্যাক্সেসে নিয়ে আসে। এটি মূলত রিলেশনাল ডাটাবেসগুলির সাথে কাজ করার জন্য ব্যবহৃত হয়। সংক্ষেপে, এটি আপনাকে এমন ইন্টারফেসগুলি ঘোষণার অনুমতি দেয় যার মতো পদ্ধতিগুলি findByNameOrderByAge(String name);রানটাইমে পার্স করা এবং উপযুক্ত রূপান্তরিত হবেJPA প্রশ্নের ।

এর শীর্ষে JPAস্থাপনার জন্য এটি লোভনীয় করে তোলে:

  1. রুকি বিকাশকারীরা যারা SQLএটি খারাপভাবে জানেন না বা জানেন না। এটি বিপর্যয়ের একটি রেসিপি তবে প্রকল্পটি যদি তুচ্ছ হয় তবে তারা এগুলি থেকে সরে যেতে পারে।

  2. অভিজ্ঞ ইঞ্জিনিয়াররা যারা জানেন তারা কীভাবে কাজগুলিকে দ্রুত ছড়িয়ে দিতে চান। এটি কার্যকর একটি কৌশল হতে পারে (তবে আরও পড়ুন)।

আমার অভিজ্ঞতা থেকে 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- আপনাকে বয়লারপ্লেট থেকে বাঁচানোর জন্য পর্যাপ্ত "জাদু" সহ একটি দুর্দান্ত লাইব্রেরি। এটির সাহায্যে আপনার এসকিউএল অনুসন্ধানগুলির উপর সম্পূর্ণ নিয়ন্ত্রণ রয়েছে এবং প্রায় কখনও কখনও লাইব্রেরির সাথে লড়াই করতে হয় না।


এটি একটি ভাল উত্তর তবে আপনি যদি কোণার কেসগুলি তালিকাভুক্ত করতে পারেন এবং আরও বিশদ বিবরণ দিলে এটি খুব সহায়ক হবে। এটি দুর্দান্ত উত্তর হয়ে যাবে। ধন্যবাদ
জন

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

পোস্টটি সম্পাদনা করেছেন এবং আরও একটি উদাহরণ যুক্ত করেছেন।
রাইস

1

হাইবারনেট হ'ল "জেপিএ" বাস্তবায়ন যা ডাটাবেসে জাভা অবজেক্টের জন্য একটি স্পেসিফিকেশন।

আমি আর্ট জেপিএ ব্যবহার করার পরামর্শ দেব কারণ আপনি বিভিন্ন ওআরএমএসের মধ্যে স্যুইচ করতে পারেন।

আপনি যখন জেডিবিসি ব্যবহার করেন তখন আপনার এসকিউএল কোয়েরিগুলি ব্যবহার করা দরকার, সুতরাং আপনি যদি এসকিউএল বিষয়ে দক্ষ হন তবে জেডিবিসি-তে যান।


1

আপনি যদি এসকিউএল কোয়েরিতে সরলতা এবং আরও নিয়ন্ত্রণ পছন্দ করেন তবে আমি স্প্রিং ডেটা / স্প্রিং জেডিবিসি-র সাথে যেতে পরামর্শ দেব।

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

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