স্প্রিং ডেটা জেপিএ-র ক্রুডেপোসিটোরি এবং জেপাআরপোসিটোরি ইন্টারফেসের মধ্যে পার্থক্য কী?


704

স্প্রিং ডেটা জেপিএ-ক্রুডেপোসিটোরি এবং জেপাআরপোসিটোরি ইন্টারফেসের মধ্যে পার্থক্য কী ?

আমি যখন ওয়েবে উদাহরণগুলি দেখি, তখন আমি সেগুলিকে সেখানে পরিবর্তিতভাবে ব্যবহার করতে দেখি see

তাদের মধ্যে পার্থক্য কী?

আপনি কেন একে অপরকে ব্যবহার করতে চান?


এছাড়াও এই নিবন্ধটির বিভাগটি পড়ুন স্প্রিং ডেটা রিপোজিটরিগুলির পরিচিতি
ভাগ্যবান

উত্তর:


954

JpaRepositoryPagingAndSortingRepositoryঘুরে দাঁড়ায় যা প্রসারিত CrudRepository

তাদের প্রধান কাজগুলি হ'ল:

  • CrudRepository মূলত সিআরইউডি ফাংশন সরবরাহ করে।
  • PagingAndSortingRepository পৃষ্ঠাসমূহ এবং রেকর্ডগুলি বাছাই করার পদ্ধতি সরবরাহ করে।
  • JpaRepository জেপিএ সম্পর্কিত কিছু পদ্ধতি সরবরাহ করে যেমন অধ্যবসায় প্রসঙ্গে ফ্লাশ করা এবং একটি ব্যাচে রেকর্ড মুছে ফেলা।

কারণ উত্তরাধিকার সূত্রে উপরে উল্লেখ করা হয়েছে, JpaRepositoryএর সব ফাংশন থাকবে CrudRepositoryএবং PagingAndSortingRepository। তাই আপনি যদি সংগ্রহস্থলের প্রয়োজন হবে না যদি কর্তৃক প্রদত্ত কার্যাবলী আছে JpaRepositoryএবং PagingAndSortingRepository, ব্যবহার CrudRepository


142
এবং ফাইন্ডএল () :
Iteable

396

কেনের উত্তরটি মূলত সঠিক তবে আমি "আপনি কেন একে অপরকে ব্যবহার করতে চান?" আপনার প্রশ্নের অংশ।

বুনিয়াদি

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

সাধারণ ইন্টারফেস

দুটি বেস ইন্টারফেস সহ স্প্রিং ডেটা কোর লাইব্রেরি জাহাজগুলি যা কার্যকরীতার একটি উত্সর্গীকৃত সেট প্রকাশ করে:

  • CrudRepository - সিআরইউডি পদ্ধতি
  • PagingAndSortingRepository- পৃষ্ঠা ও বাছাইয়ের পদ্ধতি (প্রসারিত CrudRepository)

স্টোর-নির্দিষ্ট ইন্টারফেস

পৃথক স্টোর মডিউলগুলি (যেমন, জেপিএ বা মঙ্গোডিবি) এই বেস ইন্টারফেসগুলির স্টোর-নির্দিষ্ট এক্সটেনশানগুলি ফ্লাশিং বা ডেডিকেটেড ব্যাচিংয়ের মতো স্টোর-নির্দিষ্ট কার্যকারিতা অ্যাক্সেসের অনুমতি দেয় যা কিছু স্টোরের বৈশিষ্ট্যকে অ্যাকাউন্টে নেয়। এই জন্য একটি উদাহরণ deleteInBatch(…)এর JpaRepositoryযা থেকে ভিন্ন delete(…)যেমন একটি ক্যোয়ারী ব্যবহার প্রদত্ত সত্ত্বা যা প্রায়ই performant কিন্তু (এটা বৈশিষ্ট সংজ্ঞায়িত হিসাবে) JPA-সংজ্ঞায়িত ক্যাসকেড triggering না পার্শ্ব প্রতিক্রিয়া দিয়ে আসে মুছে দিন।

আমরা সাধারণত এই বেস ইন্টারফেসগুলি ব্যবহার না করার পরামর্শ দিই কারণ তারা ক্লায়েন্টদের কাছে অন্তর্নিহিত অধ্যবসায় প্রযুক্তিটি প্রকাশ করে এবং এইভাবে তাদের এবং সংগ্রহশালার মধ্যে সংযোগকে আরও শক্ত করে ighten এছাড়াও, আপনি কোনও সংগ্রহস্থলের মূল সংজ্ঞা থেকে কিছুটা দূরে যান যা মূলত "সত্তার সংগ্রহ"। তাই পারলে সাথে থাকুন PagingAndSortingRepository

কাস্টম সংগ্রহস্থল বেস ইন্টারফেস

সরবরাহিত বেস ইন্টারফেসগুলির মধ্যে একটির উপর নির্ভর করে সরাসরি নেতিবাচক দিকটি দ্বিগুণ। উভয়ই তাত্ত্বিক হিসাবে বিবেচিত হতে পারে তবে আমি মনে করি তারা সচেতন হওয়া গুরুত্বপূর্ণ:

  1. একটি স্প্রিং ডেটা সংগ্রহস্থল ইন্টারফেসের উপর নির্ভর করে আপনার সংগ্রহশালার ইন্টারফেসটি লাইব্রেরিতে সংযুক্ত করে। আমি মনে করি না এটি এটি একটি বিশেষ সমস্যা কারণ আপনি সম্ভবত আপনার কোডে Pageবা Pageableআপনার কোডটিতে বিমূর্ত ব্যবহার করবেন । কমার্স-ল্যাং বা পেয়ারা জাতীয় সাধারণ কোনও গ্রন্থাগার থেকে স্প্রিং ডেটা আলাদা নয়। যতক্ষণ না এটি যুক্তিসঙ্গত সুবিধা সরবরাহ করে, এটি ঠিক আছে।
  2. উদাহরণস্বরূপ প্রসারিত করার মাধ্যমে CrudRepository, আপনি একবারে দৃistence়তা পদ্ধতির একটি সম্পূর্ণ সেট প্রকাশ করলেন। এটি বেশিরভাগ পরিস্থিতিতেও বেশ ভাল তবে আপনি এমন পরিস্থিতিতে চলে যেতে পারেন যেখানে আপনি উদ্ভাসিত পদ্ধতিগুলির উপর আরও সূক্ষ্ম নিয়ন্ত্রণ পেতে চান, উদাহরণস্বরূপ এমন একটি তৈরি ReadOnlyRepositoryকরতে যাতে এর পদ্ধতি save(…)এবং delete(…)পদ্ধতিগুলি অন্তর্ভুক্ত থাকে না CrudRepository

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

interface ApplicationRepository<T> extends PagingAndSortingRepository<T, Long> { }

interface ReadOnlyRepository<T> extends Repository<T, Long> {

  // Al finder methods go here
}

প্রথম সংগ্রহস্থল ইন্টারফেসটি হ'ল কিছু সাধারণ উদ্দেশ্য ভিত্তিক ইন্টারফেস যা কেবলমাত্র পয়েন্ট 1 স্থির করে তবে আইডি টাইপটিকে Longধারাবাহিকতার জন্য সংযুক্ত করে। দ্বিতীয় ইন্টারফেসে সাধারণত সমস্ত find…(…)পদ্ধতি থেকে অনুলিপি করা থাকে CrudRepositoryএবং PagingAndSortingRepositoryতা ম্যানিপুলেটিংগুলি প্রকাশ করে না। রেফারেন্স ডকুমেন্টেশনে সেই পদ্ধতির উপর আরও পড়ুন ।

সংক্ষিপ্তসার - tl; dr

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


84

এখানে চিত্র বর্ণনা লিখুন

সারসংক্ষেপ:

  • পেজিংএন্ডসোর্টিংরেপোসিট্রি ক্রুডরোপোসিটারি প্রসারিত করে

  • জেপাআরপোসিটোরি পেজিংএন্ডসোর্টিংরেপসিতোরি প্রসারিত করে

CrudRepository ইন্টারফেস তাই এটি আপনি আপনার নিজের পদ্ধতি নির্ধারণ করেও তৈরি করতে, পড়তে, আপডেট এবং মুছে ফেলুন রেকর্ড করার অনুমতি দেয়, টি ককটেলের অপারেশনের জন্য পদ্ধতি প্রদান করে।

PagingAndSortingRepository পত্রাঙ্কন ব্যবহার করে এবং বাছাই সত্ত্বা পুনরুদ্ধার করতে অতিরিক্ত পদ্ধতি প্রদান করে।

শেষ পর্যন্ত জেপাআরপোসিটোরি আরও কিছু কার্যকারিতা যুক্ত করে যা জেপিএ-র সাথে নির্দিষ্ট।


"রেপোজিটরি <>" বাড়ায় সে সম্পর্কে কী? এর কোন পদ্ধতি থাকবে? ক্রুডেরপোসিটরি হিসাবে একই?
s-kaczmarek

15

আমি স্প্রিং ডেটা জেপিএ শিখছি। এটি আপনাকে সাহায্য করতে পারে: এখানে চিত্র বর্ণনা লিখুন


3

সমস্ত উত্তর প্রশ্নের যথেষ্ট বিশদ সরবরাহ করে। তবে আমাকে আরও কিছু যোগ করতে দিন let

কেন আমরা এই ইন্টারফেস ব্যবহার করছি:

  • তারা বসন্তকে আপনার সংগ্রহস্থল ইন্টারফেসগুলি খুঁজে পেতে এবং তাদের জন্য প্রক্সি অবজেক্ট তৈরি করার অনুমতি দেয়।
  • এটি আপনাকে এমন এমন পদ্ধতি সরবরাহ করে যা আপনাকে কিছু সাধারণ ক্রিয়াকলাপ সম্পাদন করতে দেয় (আপনি নিজের কাস্টম পদ্ধতিটিও সংজ্ঞায়িত করতে পারেন)। আমি এই বৈশিষ্ট্যটি পছন্দ করি কারণ একটি সাধারণ ক্রিয়াকলাপটি সত্যই সফলভাবে সফল করতে একটি পদ্ধতি তৈরি করে (এবং ক্যোয়ারীর সংজ্ঞা এবং প্রস্তুত বিবৃতি সংজ্ঞায়িত করে এবং তারপরে সংযোগের বস্তু দিয়ে কোয়েরিটি কার্যকর করে)!

কোন ইন্টারফেস কি করে:

  • ক্রুডেপোসিটোরি : সিআরইউডি ফাংশন সরবরাহ করে
  • পেজিংএন্ডসোর্টিংরেপোজিটরি : পৃষ্ঠাগুলি সম্পাদন এবং রেকর্ডগুলি বাছাই করার পদ্ধতি সরবরাহ করে
  • জেপাআরপোসিটোরি : জেপিএ সম্পর্কিত পদ্ধতিগুলি সরবরাহ করে যেমন জেদী প্রসঙ্গে ফ্লাশ করা এবং একটি ব্যাচে রেকর্ডগুলি মুছুন

কখন কোন ইন্টারফেস ব্যবহার করবেন:

Http://jtuts.com/2014/08/26/differences-between-crudrepository- and-jparepository-in-spring-data-jpa/ অনুসারে

সাধারণত বাছাই করা এবং পেজিং করা দরকার কি না তার উপর নির্ভর করে ক্রুডরোপোসিটরি বা পেজিংএন্ডসোর্টিং রেপোসিটরি ব্যবহার করা সবচেয়ে ভাল ধারণা ।

JpaRepository সম্ভব হলে এড়ানো উচিত, কারণ এটি বেঁধে আপনি JPA অধ্যবসায় প্রযুক্তি সংগ্রহস্থল ও অধিকাংশ ক্ষেত্রে আপনি সম্ভবত এমনকি এটি দ্বারা উপলব্ধ অতিরিক্ত পদ্ধতি ব্যবহার করা হবে না।

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