Javax.persistance.Query.getResultList () বাতিল করতে পারেন?


115

এবং যদি তা হয় তবে কোন পরিস্থিতিতে?

জাভাডোক এবং জেপিএ স্পেস কিছুই বলে না।


আমি ঠিক এই প্রশ্নটি অনুসন্ধান করছিলাম! tks! আপ 4 আপনি!
rafa.ferreira

উত্তর:


69

তুমি ঠিক. জেপিএ স্পেসিফিকেশন এ সম্পর্কে কিছুই বলে না। তবে হাইবারনেট বইয়ের ২ য় সংস্করণ সহ জাভা পার্সিস্টেন্স বলে:

যদি ক্যোয়ারির ফলাফল খালি হয় তবে একটি নাল ফেরত দেওয়া হবে

হাইবারনেট জেপিএ বাস্তবায়ন (সত্তা ব্যবস্থাপক) বাতিল হয়ে যায় যখন আপনি ক্যোয়ারী কল করেন getgetResultList () কোনও ফলাফল ছাড়াই।

হালনাগাদ

কিছু ব্যবহারকারীর নির্দেশ অনুসারে, মনে হচ্ছে হাইবারনেটের একটি নতুন সংস্করণ পরিবর্তে একটি খালি তালিকা দেয়।

খালি তালিকা Eclipselink এ পাশাপাশি ফিরে আসে যখন কোনও ফলাফল পাওয়া যায় না।


29
এটি অবশ্যই পুরানো, হাইবারনেট একটি খালি তালিকা দেয়।
মাইকেল লাফারগু

2
হাইবারনেট ৪.৩.১০ (স্প্রিং ডেটার জন্য জেপিএ ইঞ্জিন হিসাবে চলমান) থেকে আমি এখনও শূন্য হয়েছি। এটি কেবলমাত্র একক নেটিভ ক্যোয়ারির জন্যই ঘটে, কারণ সাধারণ জেপিএ অনুসন্ধানগুলি প্রত্যাশা অনুযায়ী কাজ করে।
জেসেক প্রুশিয়া

1
কেবল ওআর ব্যবহার করে উভয় শর্ত পরীক্ষা করে দেখুন। if(rows == null || rows.size == 0){}যেখানে সারিগুলি getResultList () ফেরত দেয়
945

কেবলমাত্র এটি একটি বিকল্প of
de.la.ru

আমি বিশ্বাস করি যে 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অবশ্যই অবশ্যই যাচাই করবো এবং প্রয়োজন হলে খালি তালিকাটি নিজেই ফিরিয়ে দেব।
রেনে

23

যদি চশমা বলে যে এটি ঘটতে পারে না, আপনি কি তাদের বিশ্বাস করবেন? আপনার কোডটি অনুগ্রহ করে বিভিন্ন জেপিএ প্রয়োগের বিপরীতে চালাতে পারে তা প্রদত্ত, আপনি কি প্রতিটি প্রয়োগকারীকে এটি সঠিক করার জন্য বিশ্বাস করবেন?

যাই হোক না কেন, আমি ডিফেন্সিভ কোড দিয়ে নাল চেক করব।

এখন বড় প্রশ্ন: আমরা কি "নাল" এবং একটি খালি তালিকা সমার্থক হিসাবে বিবেচনা করব? এখানেই চশমাগুলি আমাদের সহায়তা করা উচিত, এবং না।

আমার অনুমান যে নাল রিটার্ন (যদি সত্যই এটি ঘটে যেতে পারে) "আমি কোয়েরিটি বুঝতে পারি নি" এর সমতুল্য এবং খালি তালিকাটি "হ্যাঁ, কোয়েরিটি বোঝে, তবে কোনও রেকর্ড ছিল না"।

আপনার কাছে সম্ভবত একটি কোড পাথ (সম্ভবত একটি ব্যতিক্রম) রয়েছে যা অপসারণযোগ্য প্রশ্নের সাথে ডিল করে, আমি সেই পথটি নীচে ফিরতে নির্দেশ দেব।


+1 আপনি যখন ঠিক বলেছেন: "আপনি কি প্রতিটি জেপিএ সরবরাহকারীকে বিশ্বাস করবেন?" না :)
ডিএফএ

যোগ করার জন্য সম্পাদিত: আর্থার উল্লেখ করেছেন যে হাইবারনেটের জেপিএ আসলে কোনও নথি না পাওয়া গেলে বাতিল করে দেয়। সুতরাং প্রকৃতপক্ষে এই ক্ষেত্রে, আমাদের নাল এবং খালি তালিকা একসাথে ভাঁজ করা দরকার। আমি বিশ্বাস করি যে আমরা উপরে যে চিন্তা প্রক্রিয়াটি করেছি তা এখনও বৈধ। এটি এমনকি অনুমেয় যে আমাদের বিভিন্ন জেপিএ স্ট্যাকের জন্য নালীর বিভিন্ন চিকিত্সা করা উচিত। বহনযোগ্য মজা আপনাকে স্বাগতম।
djna

একমত। জেপিএ নির্দিষ্ট করে যা করা উচিত তা না করার কারণে কেবল "পোর্টেবিলিটি ফান" বিদ্যমান রয়েছে ... সুনির্দিষ্ট শব্দার্থবিজ্ঞান নির্দিষ্ট করে। লজ্জাজনক এটি নিযুক্ত স্বার্থযুক্ত কমিটি দ্বারা পরিচালিত হয়।
ডেটা নিউক্লিয়াস

2
"আমি কোয়েরিটি বুঝতে পারি নি" হিসাবে পরিচালনা করা উচিত Exception, nullযেখানে Collectionরিটার্ন টাইপ রয়েছে সেখানে ফিরে আসা একটি স্পষ্ট ডিজাইনের ত্রুটি
মতোন

13

আর্থারের পোস্টের বিপরীতে, যখন আমি আসলে এমন একটি ক্যোয়ারী চালিয়েছিলাম যা কোনও সংস্থার সাথে মেলে না আমি খালি তালিকা পেয়েছি, নাল নয়। এটি হাইবারনেট ব্যবহার করছে এবং এটিই আমি সঠিক আচরণ বিবেচনা করি: আপনি সত্তা সংগ্রহের জন্য জিজ্ঞাসা করলে একটি খালি তালিকা সঠিক উত্তর হয় এবং কোনও কিছুই থাকে না।


2
ওপেনজেপিএর জন্য, আমি শূন্যের পরিবর্তে একটি খালি তালিকাও পাই।
জ্ঞানভি

3

আপনি যদি org.hibernate.loader.Loader(4.1) ঘুরে দেখেন তবে দেখতে পাবেন যে তালিকাটি সর্বদা প্রক্রিয়া রেজাল্টসেট () পদ্ধতি ( দস্তাবেজ , উত্স ) এর ভিতরেই সূচিত হয় ।

protected List processResultSet(...) throws SQLException {
   final List results = new ArrayList();

   handleEmptyCollections( queryParameters.getCollectionKeys(), rs, session );
   ...
   return results;

}

সুতরাং আমি মনে করি না এটি এখন শূন্য হবে।


2
সঠিক কোড স্নিপেট জন্য চিয়ার্স। তবে এই উত্তরটি কেবল হাইবারনেটকে কেন্দ্র করে যা স্পেসিফিকেশনের বাস্তবায়নের অন্যতম। ওপেনজেপিএর মতো অন্যান্য বাস্তবায়নও আচরণে পৃথক। এছাড়াও, হাইবারনেট বিভিন্ন সংস্করণে আচরণ পরিবর্তন করেছে বলে মনে হচ্ছে।
ভেনকি

1

অবশ্যই, আপনি যদি জাকার্তার কালেকশন ইউটিলেস.আইনটিএম্পটির সাথে ফলাফলের সেটটি পরীক্ষা করেন তবে আপনি কোনওভাবেই coveredাকা পড়েছেন।


0

Query.getResultList()পরিবর্তে একটি খালি তালিকা ফেরত দেয় null। সুতরাং isEmpty()প্রত্যাশিত ফলাফলটি যাচাই করে দেখুন এবং যদি এটি মিথ্যা হয় তবে বাকী যুক্তি দিয়ে চালিয়ে যান।


0

বাস্তবায়ন দেওয়া 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;
    }

আমার হাইবারনেট সংস্করণটি: ৩.৩.১.জি.এ.

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