উত্তর:
তুমি ঠিক. জেপিএ স্পেসিফিকেশন এ সম্পর্কে কিছুই বলে না। তবে হাইবারনেট বইয়ের ২ য় সংস্করণ সহ জাভা পার্সিস্টেন্স বলে:
যদি ক্যোয়ারির ফলাফল খালি হয় তবে একটি নাল ফেরত দেওয়া হবে
হাইবারনেট জেপিএ বাস্তবায়ন (সত্তা ব্যবস্থাপক) বাতিল হয়ে যায় যখন আপনি ক্যোয়ারী কল করেন getgetResultList () কোনও ফলাফল ছাড়াই।
হালনাগাদ
কিছু ব্যবহারকারীর নির্দেশ অনুসারে, মনে হচ্ছে হাইবারনেটের একটি নতুন সংস্করণ পরিবর্তে একটি খালি তালিকা দেয়।
খালি তালিকা Eclipselink এ পাশাপাশি ফিরে আসে যখন কোনও ফলাফল পাওয়া যায় না।
if(rows == null || rows.size == 0){}যেখানে সারিগুলি getResultList () ফেরত দেয়
nullখালি তালিকার পরিবর্তে প্রত্যাবর্তনটি অনুমানের দ্বারা উদ্দিষ্ট উদ্দেশ্য নয় কারণ অন্যথায় কখন প্রত্যাশা করা উচিত তা একে একে স্পষ্ট করে nullতুলেছে। বিশেষত getResultListপড়ার জন্য ডকুমেন্টেশন হিসাবে Execute a SELECT query and return the query results as a(n) (un)typed List. - @return a list of the results। আমি nullঅবশ্যই অবশ্যই যাচাই করবো এবং প্রয়োজন হলে খালি তালিকাটি নিজেই ফিরিয়ে দেব।
যদি চশমা বলে যে এটি ঘটতে পারে না, আপনি কি তাদের বিশ্বাস করবেন? আপনার কোডটি অনুগ্রহ করে বিভিন্ন জেপিএ প্রয়োগের বিপরীতে চালাতে পারে তা প্রদত্ত, আপনি কি প্রতিটি প্রয়োগকারীকে এটি সঠিক করার জন্য বিশ্বাস করবেন?
যাই হোক না কেন, আমি ডিফেন্সিভ কোড দিয়ে নাল চেক করব।
এখন বড় প্রশ্ন: আমরা কি "নাল" এবং একটি খালি তালিকা সমার্থক হিসাবে বিবেচনা করব? এখানেই চশমাগুলি আমাদের সহায়তা করা উচিত, এবং না।
আমার অনুমান যে নাল রিটার্ন (যদি সত্যই এটি ঘটে যেতে পারে) "আমি কোয়েরিটি বুঝতে পারি নি" এর সমতুল্য এবং খালি তালিকাটি "হ্যাঁ, কোয়েরিটি বোঝে, তবে কোনও রেকর্ড ছিল না"।
আপনার কাছে সম্ভবত একটি কোড পাথ (সম্ভবত একটি ব্যতিক্রম) রয়েছে যা অপসারণযোগ্য প্রশ্নের সাথে ডিল করে, আমি সেই পথটি নীচে ফিরতে নির্দেশ দেব।
Exception, nullযেখানে Collectionরিটার্ন টাইপ রয়েছে সেখানে ফিরে আসা একটি স্পষ্ট ডিজাইনের ত্রুটি
আর্থারের পোস্টের বিপরীতে, যখন আমি আসলে এমন একটি ক্যোয়ারী চালিয়েছিলাম যা কোনও সংস্থার সাথে মেলে না আমি খালি তালিকা পেয়েছি, নাল নয়। এটি হাইবারনেট ব্যবহার করছে এবং এটিই আমি সঠিক আচরণ বিবেচনা করি: আপনি সত্তা সংগ্রহের জন্য জিজ্ঞাসা করলে একটি খালি তালিকা সঠিক উত্তর হয় এবং কোনও কিছুই থাকে না।
আপনি যদি org.hibernate.loader.Loader(4.1) ঘুরে দেখেন তবে দেখতে পাবেন যে তালিকাটি সর্বদা প্রক্রিয়া রেজাল্টসেট () পদ্ধতি ( দস্তাবেজ , উত্স ) এর ভিতরেই সূচিত হয় ।
protected List processResultSet(...) throws SQLException {
final List results = new ArrayList();
handleEmptyCollections( queryParameters.getCollectionKeys(), rs, session );
...
return results;
}
সুতরাং আমি মনে করি না এটি এখন শূন্য হবে।
অবশ্যই, আপনি যদি জাকার্তার কালেকশন ইউটিলেস.আইনটিএম্পটির সাথে ফলাফলের সেটটি পরীক্ষা করেন তবে আপনি কোনওভাবেই coveredাকা পড়েছেন।
Query.getResultList()পরিবর্তে একটি খালি তালিকা ফেরত দেয় null। সুতরাং isEmpty()প্রত্যাশিত ফলাফলটি যাচাই করে দেখুন এবং যদি এটি মিথ্যা হয় তবে বাকী যুক্তি দিয়ে চালিয়ে যান।
বাস্তবায়ন দেওয়া getResultsList()মধ্যে org.hibernate.ejb.QueryImplবর্গ, এটি একটি আসতে করা সম্ভব null:
public List getResultList() {
try {
return query.list();
}
catch (QueryExecutionRequestException he) {
throw new IllegalStateException(he);
}
catch( TypeMismatchException e ) {
throw new IllegalArgumentException(e);
}
catch (HibernateException he) {
em.throwPersistenceException( he );
return null;
}
আমার হাইবারনেট সংস্করণটি: ৩.৩.১.জি.এ.