সেখানে হয়েছে কিছু আলোচনা এখানে JPA সত্ত্বা এবং যার সম্পর্কে hashCode()
/ equals()
বাস্তবায়ন JPA সত্তা শ্রেণীর জন্য ব্যবহার করা উচিত। তাদের বেশিরভাগ (যদি না সবাই) হাইবারনেটের উপর নির্ভর করে তবে আমি তাদের নিয়ে জেপিএ-বাস্তবায়ন-নিরপেক্ষভাবে আলোচনা করতে চাই (আমি একাইপ্লেস লিঙ্কটি ব্যবহার করছি)।
সমস্ত সম্ভাব্য বাস্তবায়নের সাথে সম্পর্কিত নিজস্ব সুবিধা এবং অসুবিধাগুলি রয়েছে :
hashCode()
/equals()
চুক্তি সাদৃশ্য (অপরিবর্তনীয়তা) জন্যList
/Set
অপারেশন- কিনা অভিন্ন বস্তু (যেমন বিভিন্ন সেশন থেকে, প্রখর রৌদ্রে লোড ডাটা স্ট্রাকচার থেকে গতিশীল প্রক্সি) সনাক্ত করা যাবে
- সত্তা বিচ্ছিন্ন (বা অ-স্থিত) অবস্থায় সঠিকভাবে আচরণ করে কিনা
আমি যতদূর দেখতে পাচ্ছি, এখানে তিনটি বিকল্প রয়েছে :
- এগুলি ওভাররাইড করবেন না; উপর নির্ভর করে
Object.equals()
এবংObject.hashCode()
hashCode()
/equals()
কাজ- অভিন্ন বস্তু, গতিশীল প্রক্সি সহ সমস্যা সনাক্ত করতে পারে না
- বিচ্ছিন্ন সত্তা নিয়ে কোনও সমস্যা নেই
- প্রাথমিক কী এর উপর ভিত্তি করে সেগুলি ওভাররাইড করুন
hashCode()
/equals()
ভেঙে গেছে- সঠিক পরিচয় (সমস্ত পরিচালিত সত্তার জন্য)
- বিচ্ছিন্ন সত্তা নিয়ে সমস্যা
- বিজনেস-আইডির ভিত্তিতে এগুলি ওভাররাইড করুন (অ-প্রাথমিক কী ক্ষেত্রসমূহ; বিদেশী কী সম্পর্কে কী?)
hashCode()
/equals()
ভেঙে গেছে- সঠিক পরিচয় (সমস্ত পরিচালিত সত্তার জন্য)
- বিচ্ছিন্ন সত্তা নিয়ে কোনও সমস্যা নেই
আমার প্রশ্নগুলি হ'ল:
- আমি কি কোনও বিকল্প এবং / অথবা প্রো / কন পয়েন্ট মিস করেছি?
- আপনি কোন বিকল্পটি বেছে নিয়েছিলেন এবং কেন?
আপডেট 1:
দ্বারা " hashCode()
/ equals()
ভাঙা হয়", আমি যে ধারাবাহিক মানে hashCode()
আমন্ত্রণ বিভিন্নমুখী মান ফেরত দিতে পারেন, যা (যখন সঠিকভাবে বাস্তবায়িত) অর্থে ভাঙ্গা না Object
এপিআই ডকুমেন্টেশন, কিন্তু যখন একটি থেকে একটি পরিবর্তিত সত্তা পুনরুদ্ধার করতে চেষ্টা যা সমস্যার কারণ Map
, Set
বা অন্যান্য হ্যাশ-ভিত্তিক Collection
। ফলস্বরূপ, জেপিএ বাস্তবায়ন (কমপক্ষে এক্লিপস লিঙ্ক) কিছু ক্ষেত্রে সঠিকভাবে কাজ করবে না।
আপডেট 2:
আপনার উত্তরগুলির জন্য আপনাকে ধন্যবাদ - তাদের বেশিরভাগের কাছে উল্লেখযোগ্য গুণ রয়েছে।
দুর্ভাগ্যক্রমে, আমি এখনও নিশ্চিত নই যে কোন বাস্তব জীবন বাস্তবায়নের জন্য সবচেয়ে ভাল হবে বা আমার অ্যাপ্লিকেশনটির জন্য সেরা পদ্ধতির কীভাবে নির্ধারণ করা যায়। সুতরাং, আমি প্রশ্নটি উন্মুক্ত রাখব এবং আরও কিছু আলোচনা এবং / অথবা মতামতের আশা করব।
hashcode()
একই বস্তুর উদাহরণের জন্য আহ্বানের একই মানটি ফিরিয়ে নেওয়া উচিত, যতক্ষণ না equals()
বাস্তবায়নের পরিবর্তনের ক্ষেত্রে কোনও ক্ষেত্র ব্যবহৃত হয় । অন্য কথায়, যদি আপনার ক্লাসে তিনটি ক্ষেত্র থাকে এবং আপনার equals()
পদ্ধতি উদাহরণগুলির সাম্যতা নির্ধারণের জন্য কেবল তার দুটি মাত্র ব্যবহার করে, তবে আপনি hashcode()
যদি ক্ষেত্রের মানগুলির মধ্যে একটি পরিবর্তন করেন তবে আপনি প্রত্যাবর্তনের মান পরিবর্তন করতে পারবেন - যা বিবেচনা করার সময় আপনি তা বিবেচনা করতে পারবেন এই বস্তুর উদাহরণটি পুরানো উদাহরণটি উপস্থাপন করে এমন মানটির সাথে আর "সমান" নয়।