জেপিকিউএল ক্লজে: জাভা-অ্যারে (বা তালিকা, সেটগুলি ...)?


106

আমি আমাদের ডাটাবেস থেকে একটি ছোট কিন্তু স্বেচ্ছাচারিত সংখ্যার মানগুলিতে একটি পাঠ্য ট্যাগ সেট করা সমস্ত বস্তু লোড করতে চাই। এসকিউএল-এ এটি নিয়ে যাওয়ার যৌক্তিক উপায় হ'ল "ইন" ধারাটি তৈরি করা। জেপিকিউএল IN এর জন্য অনুমতি দেয়, তবে মনে হয় যে আমি প্রতিটি সিঙ্গেল প্যারামিটার IN থেকে সরাসরি (যেমন, "ইন (: ইন 1,: ইন 2,: ইন 3)") নির্দিষ্ট করেছিলাম।

কোনও অ্যারে, বা একটি তালিকা (বা অন্য কোনও ধারক) নির্দিষ্ট করার কোনও উপায় আছে যা একটি আইএন ধারাটির মানগুলিতে অনিয়ন্ত্রিত হওয়া উচিত?

উত্তর:


206

আমি জেপিএ 1.0 এর জন্য নিশ্চিত নই তবে আপনি Collectionজেপিএ 2.0 তে পাস করতে পারেন :

String qlString = "select item from Item item where item.name IN :names"; 
Query q = em.createQuery(qlString, Item.class);

List<String> names = Arrays.asList("foo", "bar");

q.setParameter("names", names);
List<Item> actual = q.getResultList();

assertNotNull(actual);
assertEquals(2, actual.size());

EclipseLInk দিয়ে পরীক্ষা করেছেন। হাইবারনেট ৩.৩.১ এর সাহায্যে আপনাকে প্যারামিটারটি প্রথম বন্ধনী সহ ঘিরে ফেলতে হবে:

String qlString = "select item from Item item where item.name IN (:names)";

তবে এটি একটি বাগ, পূর্ববর্তী নমুনায় থাকা জেপিকিউএল কোয়েরিটি বৈধ জেপিকিউএল। এইচএইচএইচ -5126 দেখুন ।


5
"ক্লজে" ব্যবহার করার জন্য সর্বাধিক সংখ্যক নাম রয়েছে কি?
গন্ডিম

3
হাইবারনেটে উল্লিখিত বাগটি সংস্করণ 3.6.1-এ সংশোধন করা হয়েছে বলে মনে হয়েছে
ডেনিস নিয়াজহেভ

1
@ প্রিন্সলসিন একটি আইএন-ক্লজে মানগুলির সংখ্যা আপনার ডিবিএমএস
টিম বাথের

জেপিএ ১.০ এ কাজ করে (এবং এটি প্রথম বন্ধনী দ্বারা আবশ্যক নয়, তবে
জাভিয়ের লারিওস

আপনি যদি চান> => আইটেম.নামে (যেমন: নাম)
dzgeek

3

ওরাকল সীমাটি 1000 পরামিতি। সমস্যাটি হাইবারনেট দ্বারা সংস্করণ ৪.১..7 এ সমাধান করা হয়েছে, যদিও পাসের প্যারামিটার তালিকাটি ৫০০ এর সেটে বিভক্ত করে দেখুন দেখুন JIRA HHH-1123


1
দুর্ভাগ্যক্রমে এটি সমাধান হয়নি। টিকিটটিকে সমাধান হিসাবে চিহ্নিত করা হয়েছে, তবে সমস্যাটি (মন্তব্যে দেখানো হয়েছে) হাইবারনেট দল কর্তৃক ঠিক করা হয়নি।
ড্রাকলস

@ ড্রাকলস উম কই? আমি ২০১ than সালের চেয়ে পুরানো কোনও মন্তব্য দেখছি না And এবং এগুলি কেবলমাত্র দুটি মন্তব্য যা সাধারণত ইন্টারনেট 'হেল্প প্লাজ !!! 11 !!!!' ব্যতীত ব্যবহারিকভাবে কিছুই বলে না। সমস্যার সমাধান হিসাবে আপনি বাগ রিপোর্টকে বিশ্বাস করার কোনও কারণ দেননি।
27

@ searchengine27 আমি বললাম রিপোর্ট ছিল না সমস্যাগুলি সমাধান করা থাকা সত্ত্বেও এটা সমাধান রূপে চিহ্নিত করা হচ্ছে। রেজুলেশনটি ছিল, স্টিভ এবারসোলের রিপোর্ট অনুসারে: "এর সমাধানটি হ'ল আমরা যখন এই শর্তটি সনাক্ত করি তখন আমরা কেবল লগিংয়ের মাধ্যমে ব্যবহারকারীদের সতর্ক করতে যাচ্ছি।" 2012 সালে নোয়েল ট্রাউটের মন্তব্যগুলি কেন এটি পর্যাপ্ত নয় তা প্রসারিত করে।
ড্রাগলস

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