স্প্রিং ডেটা জেপিএ- র ক্রুডেপোসিটোরি এবং জেপাআরপোসিটোরি ইন্টারফেসের মধ্যে পার্থক্য কী ?
আমি যখন ওয়েবে উদাহরণগুলি দেখি, তখন আমি সেগুলিকে সেখানে পরিবর্তিতভাবে ব্যবহার করতে দেখি see
তাদের মধ্যে পার্থক্য কী?
আপনি কেন একে অপরকে ব্যবহার করতে চান?
স্প্রিং ডেটা জেপিএ- র ক্রুডেপোসিটোরি এবং জেপাআরপোসিটোরি ইন্টারফেসের মধ্যে পার্থক্য কী ?
আমি যখন ওয়েবে উদাহরণগুলি দেখি, তখন আমি সেগুলিকে সেখানে পরিবর্তিতভাবে ব্যবহার করতে দেখি see
তাদের মধ্যে পার্থক্য কী?
আপনি কেন একে অপরকে ব্যবহার করতে চান?
উত্তর:
JpaRepository
PagingAndSortingRepository
ঘুরে দাঁড়ায় যা প্রসারিত CrudRepository
।
তাদের প্রধান কাজগুলি হ'ল:
CrudRepository
মূলত সিআরইউডি ফাংশন সরবরাহ করে।PagingAndSortingRepository
পৃষ্ঠাসমূহ এবং রেকর্ডগুলি বাছাই করার পদ্ধতি সরবরাহ করে।JpaRepository
জেপিএ সম্পর্কিত কিছু পদ্ধতি সরবরাহ করে যেমন অধ্যবসায় প্রসঙ্গে ফ্লাশ করা এবং একটি ব্যাচে রেকর্ড মুছে ফেলা।কারণ উত্তরাধিকার সূত্রে উপরে উল্লেখ করা হয়েছে, JpaRepository
এর সব ফাংশন থাকবে CrudRepository
এবং PagingAndSortingRepository
। তাই আপনি যদি সংগ্রহস্থলের প্রয়োজন হবে না যদি কর্তৃক প্রদত্ত কার্যাবলী আছে JpaRepository
এবং PagingAndSortingRepository
, ব্যবহার CrudRepository
।
কেনের উত্তরটি মূলত সঠিক তবে আমি "আপনি কেন একে অপরকে ব্যবহার করতে চান?" আপনার প্রশ্নের অংশ।
আপনার সংগ্রহস্থলের জন্য আপনি যে বেস ইন্টারফেসটি বেছে নিন তার দুটি প্রধান উদ্দেশ্য রয়েছে। প্রথমত, আপনি স্প্রিং ডেটা সংগ্রহস্থল অবকাঠামোটিকে আপনার ইন্টারফেসটি সন্ধান করতে এবং প্রক্সি তৈরির ট্রিগার করতে অনুমতি দেন যাতে আপনি ক্লায়েন্টগুলিতে ইন্টারফেসের উদাহরণগুলি ইনজেক্ট করেন। দ্বিতীয় উদ্দেশ্যটি হ'ল অতিরিক্ত পদ্ধতি ঘোষণা না করে ইন্টারফেসে যতটা প্রয়োজন তত কার্যকারিতা টান।
দুটি বেস ইন্টারফেস সহ স্প্রিং ডেটা কোর লাইব্রেরি জাহাজগুলি যা কার্যকরীতার একটি উত্সর্গীকৃত সেট প্রকাশ করে:
CrudRepository
- সিআরইউডি পদ্ধতিPagingAndSortingRepository
- পৃষ্ঠা ও বাছাইয়ের পদ্ধতি (প্রসারিত CrudRepository
)পৃথক স্টোর মডিউলগুলি (যেমন, জেপিএ বা মঙ্গোডিবি) এই বেস ইন্টারফেসগুলির স্টোর-নির্দিষ্ট এক্সটেনশানগুলি ফ্লাশিং বা ডেডিকেটেড ব্যাচিংয়ের মতো স্টোর-নির্দিষ্ট কার্যকারিতা অ্যাক্সেসের অনুমতি দেয় যা কিছু স্টোরের বৈশিষ্ট্যকে অ্যাকাউন্টে নেয়। এই জন্য একটি উদাহরণ deleteInBatch(…)
এর JpaRepository
যা থেকে ভিন্ন delete(…)
যেমন একটি ক্যোয়ারী ব্যবহার প্রদত্ত সত্ত্বা যা প্রায়ই performant কিন্তু (এটা বৈশিষ্ট সংজ্ঞায়িত হিসাবে) JPA-সংজ্ঞায়িত ক্যাসকেড triggering না পার্শ্ব প্রতিক্রিয়া দিয়ে আসে মুছে দিন।
আমরা সাধারণত এই বেস ইন্টারফেসগুলি ব্যবহার না করার পরামর্শ দিই কারণ তারা ক্লায়েন্টদের কাছে অন্তর্নিহিত অধ্যবসায় প্রযুক্তিটি প্রকাশ করে এবং এইভাবে তাদের এবং সংগ্রহশালার মধ্যে সংযোগকে আরও শক্ত করে ighten এছাড়াও, আপনি কোনও সংগ্রহস্থলের মূল সংজ্ঞা থেকে কিছুটা দূরে যান যা মূলত "সত্তার সংগ্রহ"। তাই পারলে সাথে থাকুন PagingAndSortingRepository
।
সরবরাহিত বেস ইন্টারফেসগুলির মধ্যে একটির উপর নির্ভর করে সরাসরি নেতিবাচক দিকটি দ্বিগুণ। উভয়ই তাত্ত্বিক হিসাবে বিবেচিত হতে পারে তবে আমি মনে করি তারা সচেতন হওয়া গুরুত্বপূর্ণ:
Page
বা Pageable
আপনার কোডটিতে বিমূর্ত ব্যবহার করবেন । কমার্স-ল্যাং বা পেয়ারা জাতীয় সাধারণ কোনও গ্রন্থাগার থেকে স্প্রিং ডেটা আলাদা নয়। যতক্ষণ না এটি যুক্তিসঙ্গত সুবিধা সরবরাহ করে, এটি ঠিক আছে।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
তা ম্যানিপুলেটিংগুলি প্রকাশ করে না। রেফারেন্স ডকুমেন্টেশনে সেই পদ্ধতির উপর আরও পড়ুন ।
সংগ্রহস্থলের বিমূর্ততা আপনাকে আর্কিটেকচারাল এবং কার্যকরী প্রয়োজনগুলি দ্বারা চালিত বেস রিপোজিটরি বাছাই করতে দেয়। বাক্সের বাইরে যদি সরবরাহ করা থাকে তবে সেগুলি ব্যবহার করুন, যদি প্রয়োজন হয় তবে আপনার নিজের সংগ্রহস্থল বেস ইন্টারফেসগুলি ক্র্যাফ্ট করুন। অপরিহার্য না হলে স্টোর নির্দিষ্ট সংগ্রহস্থল ইন্টারফেস থেকে দূরে থাকুন।
সারসংক্ষেপ:
পেজিংএন্ডসোর্টিংরেপোসিট্রি ক্রুডরোপোসিটারি প্রসারিত করে
জেপাআরপোসিটোরি পেজিংএন্ডসোর্টিংরেপসিতোরি প্রসারিত করে
CrudRepository ইন্টারফেস তাই এটি আপনি আপনার নিজের পদ্ধতি নির্ধারণ করেও তৈরি করতে, পড়তে, আপডেট এবং মুছে ফেলুন রেকর্ড করার অনুমতি দেয়, টি ককটেলের অপারেশনের জন্য পদ্ধতি প্রদান করে।
PagingAndSortingRepository পত্রাঙ্কন ব্যবহার করে এবং বাছাই সত্ত্বা পুনরুদ্ধার করতে অতিরিক্ত পদ্ধতি প্রদান করে।
শেষ পর্যন্ত জেপাআরপোসিটোরি আরও কিছু কার্যকারিতা যুক্ত করে যা জেপিএ-র সাথে নির্দিষ্ট।
সমস্ত উত্তর প্রশ্নের যথেষ্ট বিশদ সরবরাহ করে। তবে আমাকে আরও কিছু যোগ করতে দিন let
কেন আমরা এই ইন্টারফেস ব্যবহার করছি:
কোন ইন্টারফেস কি করে:
কখন কোন ইন্টারফেস ব্যবহার করবেন:
Http://jtuts.com/2014/08/26/differences-between-crudrepository- and-jparepository-in-spring-data-jpa/ অনুসারে
সাধারণত বাছাই করা এবং পেজিং করা দরকার কি না তার উপর নির্ভর করে ক্রুডরোপোসিটরি বা পেজিংএন্ডসোর্টিং রেপোসিটরি ব্যবহার করা সবচেয়ে ভাল ধারণা ।
JpaRepository সম্ভব হলে এড়ানো উচিত, কারণ এটি বেঁধে আপনি JPA অধ্যবসায় প্রযুক্তি সংগ্রহস্থল ও অধিকাংশ ক্ষেত্রে আপনি সম্ভবত এমনকি এটি দ্বারা উপলব্ধ অতিরিক্ত পদ্ধতি ব্যবহার করা হবে না।