জেপিএ এবং হাইবারনেট - মানদণ্ড বনাম জেপিকিউএল বা এইচকিউএল


295

মাপদণ্ড বা এইচকিউএল ব্যবহার করার পক্ষে কি কি ? হাইবারনেটে কোয়েরিয়া প্রকাশ করার জন্য ক্রিটারিয়া এপিআই হ'ল একটি দুর্দান্ত অবজেক্ট-ভিত্তিক উপায়, তবে কখনও কখনও এইচকিউএল এর চেয়ে ক্রেটারিয়া কোয়েরিগুলি বোঝা / বানাতে আরও কঠিন হয়।

আপনি কখন মানদণ্ড এবং কখন এইচকিউএল ব্যবহার করবেন? কোন ক্ষেত্রে আপনি কোনটি পছন্দ করেন? নাকি এটা শুধু স্বাদের বিষয়?


সঠিক উত্তরটি হবে 'ব্যবহারের ক্ষেত্রে নির্ভর করে'।
Hace

এবং এই সরঞ্জাম সম্পর্কে কি ? এটি একটি অবজেক্ট উপায়ে সাধারণ জিজ্ঞাসা তৈরির অনুমতি দেয়: সুরক্ষিত ক্লজ নির্বাচন করুন () {রিটার্ন em.select ("DISTINCT i") থেকে। (this.getName (), "i") .joinFetch ("i.locale lf") } পাবলিক টি ফাইবাইস্লগ (স্ট্রিং স্লাগ) {রিটার্ন (টি) এই.সलेक्ट করুন () .জয়েন ("আই.লোকেলে এল"); । কোথাও ("l.slug =?", স্লাগ) .ফ্যাচসিং (); }
ভোজটাচ

1
একটি মতামত ভিত্তিক প্রশ্নের সংজ্ঞা, তবুও লোকেরা এটি বন্ধ করার সুযোগ নেন নি ... সাইটের FAQ অনুসারে

উত্তর:


212

আমি বেশিরভাগ গতিশীল প্রশ্নের জন্য মানদণ্ড ক্যোয়ারী পছন্দ করি। উদাহরণস্বরূপ গতিশীলভাবে কিছু অর্ডার যুক্ত করা বা কিছু প্যারামিটারের উপর নির্ভর করে কিছু অংশ (যেমন সীমাবদ্ধতা) ছেড়ে দেওয়া অনেক সহজ।

অন্যদিকে আমি স্থির এবং জটিল প্রশ্নের জন্য এইচকিউএল ব্যবহার করছি, কারণ এইচকিউএল বোঝা / পড়া আরও সহজ। এছাড়াও, এইচকিউএল কিছুটা বেশি শক্তিশালী, আমি মনে করি, যেমন বিভিন্ন যোগদানের ধরণের জন্য।


13
এছাড়াও, যদিও মানদণ্ডটি একটু বেশি টাইপ-নিরাপদ দেখায়, কেবলমাত্র যা আপনাকে নিরাপদ বোধ করতে পারে তা হচ্ছে পরীক্ষা করা।

এমন কোনও ভাল উদাহরণ রয়েছে যা দেখায় যে এইচকিউএল কেন কিছু ক্ষেত্রে মানদণ্ডের তুলনায় ভাল? আমি একটি ব্লগের শেষে পড়েছি, তবে কিছুই বুঝতে পারি নি। আপনি যদি সাহায্য করতে পারেন তবে এটি প্রশংসা করবে। ধন্যবাদ। লিঙ্ক - javalobi.org/articles/hibernatequery102
এরান মোরাড

উপরের সমস্ত কারণ - আমি এইচকিউএল এর চেয়েও মানদণ্ড পছন্দ করি কারণ এটি প্রোগ্রামার থেকে নিরাপদ, কোডিং ত্রুটি হ্রাস করে - এইচকিউএল স্ট্রিংয়ের সংকলন বৈধ নয়।
নুনো

তবে, পৃষ্ঠাবদ্ধকরণের সময় স্বতন্ত্র সত্তা পুনরুদ্ধারের বিষয়টি রয়েছে। এটি করার সময় আমি সমস্যাগুলি এড়ানোর জন্য এইচকিউএল বাছাই করতাম ...
অ্যান্টনি ওয়েবস্টার

কলামের নামগুলির জন্য একটি মেটোমোডেলের সাথে মানদণ্ডের ক্যোয়ারী ব্যবহার করা কোনও কিছু না ভাঙতে রিফ্যাক্টরিংয়ের সময় এবং কোডের সমস্ত উপস্থিতিগুলির নাম পরিবর্তন করতে একটি আধুনিক আইডিইর একটি সাধারণ কমান্ড সহ সহায়তা করে।
ম্যাসিমো

92

এইচকিউএল এবং মাপদণ্ডের প্রশ্নগুলির মধ্যে পারফরম্যান্সের ক্ষেত্রে পার্থক্য রয়েছে, যতবারই আপনি মাপদণ্ডের প্রশ্ন ব্যবহার করে কোনও প্রশ্নের সন্ধান করেন, এটি টেবিলের নামের জন্য একটি নতুন উপন্যাস তৈরি করে যা কোনও ডিবি-র শেষ কোয়েরি ক্যাশে প্রতিফলিত হয় না। এটি চালিত এসকিউএল সংকলনের একটি ওভারহেডের দিকে পরিচালিত করে, কার্যকর করতে আরও সময় নেয়।

আনার কৌশল সম্পর্কিত [http://www.hibernate.org/315.html]

  • মানদণ্ড আপনার ম্যাপিংগুলিতে অলসতা সেটিংসকে সম্মান করে এবং গ্যারান্টি দেয় যে আপনি কী বোঝাতে চান তা লোড হয়েছে। এর অর্থ হল একটি মানদণ্ডের ক্যোয়ারীর ফলে সমস্ত অলস ম্যাপযুক্ত সমিতি এবং সংগ্রহগুলি সহ সাবগ্রাফ আনার জন্য বেশ কয়েকটি এসকিউএল তাত্ক্ষণিক নির্বাচন বাছাই করতে পারে। আপনি যদি "কীভাবে" এবং "কী" পরিবর্তন করতে চান তবে নির্দিষ্ট সংগ্রহ বা সংঘের জন্য বাইরের জয়েন আনতে সক্ষম বা অক্ষম করতে setFetchMode () ব্যবহার করুন। মানদণ্ড অনুসন্ধানগুলি আনার কৌশলটিকেও সম্পূর্ণ সম্মান করে (বনাম নির্বাচন বনাম সাব-সাবলেটতে যোগ দিন)।
  • এইচকিউএল আপনার ম্যাপিংগুলিতে অলসতা সেটিংসকে সম্মান করে এবং গ্যারান্টি দেয় যে আপনি যা লোড করতে চান তা লোড হয়েছে। এর অর্থ হ'ল একটি এইচকিউএল ক্যোয়ারীর ফলে সমস্ত অ-অলস ম্যাপযুক্ত সমিতি এবং সংগ্রহগুলি সহ সাবগ্রাফটি আনতে বেশ কয়েকটি এসকিউএল তাত্ক্ষণিকভাবে নির্বাচনী বয়ান তৈরি হতে পারে। আপনি যদি "কীভাবে" এবং "কী" পরিবর্তন করতে চান তবে নির্দিষ্ট সংগ্রহের জন্য বহিরাগত-যোগে সক্ষম করতে বা বহু-থেকে-এক বা এক-থেকে-এক সংঘকে, বা সক্ষম হতে ফেচ যোগ দিন অভ্যন্তরীণ একটি নন-বহনযোগ্য বহু-থেকে-এক বা এক-থেকে-এক সমিতির জন্য আনতে অভ্যন্তরীণ যোগদান করুন। এইচকিউএল অনুসন্ধানগুলি ম্যাপিং নথিতে সংজ্ঞায়িত কোনও ফেচ = "জয়েন" কে সম্মান করে না।

1
যে কেউ ব্রাউজ করছে তার দিকে ইঙ্গিত করছে। এই উত্তরটি ২০০৮ সালের। এটি এখন আর নাও হতে পারে। dimovelev.blogspot.com/2015/02/…
অমলগোভিনাস

41

মানদণ্ড হ'ল একটি অবজেক্ট-ভিত্তিক এপিআই, অন্যদিকে এইচকিউএল মানে স্ট্রিং কনকেন্টেশন। এর অর্থ অবজেক্ট-ওরিয়েন্টডনেসনের সমস্ত সুবিধা প্রযোজ্য:

  1. অন্য সবগুলি সমান হওয়ায় ওও সংস্করণটি ত্রুটি হওয়ার কিছুটা কম। যে কোনও পুরানো স্ট্রিং এইচকিউএল কোয়েরিতে সংযুক্ত হতে পারে, যেখানে কেবল বৈধ মানদণ্ডের বস্তুগুলি এটিকে একটি মানদণ্ড ট্রি হিসাবে তৈরি করতে পারে। কার্যকরভাবে, মানদণ্ডের ক্লাসগুলি আরও সীমাবদ্ধ।
  2. স্বতঃ-সম্পূর্ণর সাথে, ওও আরও আবিষ্কারযোগ্য (এবং কমপক্ষে আমার পক্ষে এটি ব্যবহার করা সহজ)। কোয়েরির কোন অংশটি কোথায় গেছে তা আপনার অগত্যা মনে করার দরকার নেই; আইডিই আপনাকে সহায়তা করতে পারে
  3. আপনার সিনট্যাক্সের বিবরণগুলিও মনে করার দরকার নেই (কোন চিহ্নগুলি কোথায় যায়)। আপনাকে কেবল কীভাবে পদ্ধতিগুলি কল করতে এবং অবজেক্ট তৈরি করতে হবে তা জানতে হবে।

যেহেতু এইচকিউএল অনেকটা এসকিউএল এর মতো (যা বেশিরভাগ দেবগণ ইতিমধ্যে খুব ভাল জানেন) তবে এইগুলি "মনে রাখার দরকার নেই" যুক্তিগুলি তেমন ওজন বহন করে না। এইচকিউএল যদি আরও আলাদা হয় তবে এটি আরও বেশি আমদানিকারী হবে।


12
এই যুক্তিগুলি জল ধরে না (এইচকিউএল সম্পর্কিত)) এতে স্ট্রিং কনটেনটেশন জড়িত থাকতে হবে না। যে ওও সংস্করণটি ত্রুটিগুলির প্রবণতা কম তা অসমর্থিত। এটি ত্রুটিযুক্ত হিসাবে সমান প্রবণ তবে অন্য ধরণের। কী পদ্ধতিগুলি কল করতে হবে তা জানার চেষ্টাটি এইচকিউএলে কী কী চিহ্নগুলি কল করতে হবে তা জানার চেয়ে আলাদা নয় (আমি বোঝাতে চাইছি যে, আমরা এখানে পিডিই সমাধান করছি না।)
luis.espinal

এমন কোনও ভাল উদাহরণ রয়েছে যা দেখায় যে এইচকিউএল কেন কিছু ক্ষেত্রে মানদণ্ডের তুলনায় ভাল? আমি একটি ব্লগের শেষে পড়েছি, তবে কিছুই বুঝতে পারি নি। আপনি যদি সাহায্য করতে পারেন তবে এটি প্রশংসা করবে। ধন্যবাদ। লিঙ্ক - javalobi.org/articles/hibernatequery102
এরান মোরাড

1
এইচকিউএল নামের অনুসন্ধানগুলি স্থাপনের সময় সংকলিত হয় এবং এই মুহুর্তে অনুপস্থিত ক্ষেত্রগুলি (সম্ভবত খারাপ রিফ্যাক্টরগুলির জন্য?) সনাক্ত করা হয়। আমি মনে করি যে এই কোডটি আরও স্থিতিশীল করে তোলে এবং প্রকৃতপক্ষে মানদণ্ডের চেয়ে কম ত্রুটি প্রবণ।
নারদুক

মানদণ্ডে স্বয়ংক্রিয়ভাবে সম্পূর্ণরূপে অকেজো কারণ বৈশিষ্ট্যগুলি কেবল স্ট্রিং।
ল্লুইস মার্টিনেজ 15

35

আমি সাধারণত ক্রিটরিয়া ব্যবহার করি যখন আমি জানি না যে ডেটাগুলির টুকরাগুলির উপর কী ইনপুট ব্যবহার করা হবে। কোনও অনুসন্ধান ফর্মের মতো যেখানে ব্যবহারকারী 1 থেকে 50 টি আইটেমের মধ্যে যে কোনও একটি প্রবেশ করতে পারে এবং তারা কী অনুসন্ধান করবে তা আমি জানি না। ব্যবহারকারী কী সন্ধান করছে তা যাচাই করার জন্য আমি কেবল মাপদণ্ডে আরও যুক্ত করা খুব সহজ। আমি মনে করি সেই পরিস্থিতিতে এইচকিউএল কোয়েরি স্থাপন করা আরও একটু ঝামেলা হবে। এইচকিউএল দুর্দান্ত যদিও আমি যখন জানি ঠিক কী চাই।


1
এটি একটি ভাল মন্তব্য। আমরা বর্তমানে একটি অনুসন্ধান ফর্মের জন্য খুব বড় এইচকিউএল স্ট্রিংগুলি তৈরি করি যা এতে যোগদানের মাধ্যমে বিভিন্ন রকম অবজেক্ট থাকে। দেখতে কুরুচিপূর্ণ। কোনও মানদণ্ড এটি পরিষ্কার করতে পারে কিনা তা দেখতে যাচ্ছেন। আকর্ষণীয় ...
সিবিএমিক্স

ধন্যবাদ। এটি একটি দুর্দান্ত উদাহরণ। আপনি আমাকে আরও কিছু দিতে পারেন?
এরান মোরাড

31

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


22

দ্বিতীয় স্তরের ক্যোয়ারী ক্যাশে বিশেষ অপ্টিমাইজেশানের সুবিধা গ্রহণকারী প্রাকৃতিক কী লকআপগুলি নির্দিষ্ট করার একমাত্র উপায় মানদণ্ড। এইচকিউএল এর প্রয়োজনীয় ইঙ্গিত নির্দিষ্ট করার কোনও উপায় নেই।

আপনি এখানে আরও কিছু তথ্য পেতে পারেন:


21

হাইবারনেটের অন্যতম ভাল ধারণা মানদণ্ড এপি। আমার মতামত অনুসারে এগুলি হ'ল কয়েকটি পয়েন্ট যার দ্বারা আমরা এইচকিউএল এবং ক্রিটারিয়া এপি মধ্যে পার্থক্য করতে পারি

  1. এইচকিউএল হ'ল ডেটাতে সিলেক্ট এবং অ-বাছাই করা অপারেশন উভয়ই করা, কিন্তু মানদণ্ড কেবলমাত্র ডেটা বাছাইয়ের জন্য, আমরা মাপদণ্ড ব্যবহার করে অ-নির্বাচন অপারেশন করতে পারি না।
  2. এইচকিউএল স্ট্যাটিক কোয়েরিগুলি কার্যকর করার জন্য উপযুক্ত, যেখানে গতিময় ডায়নামিক কোয়েরিগুলি কার্যকর করার জন্য উপযুক্ত
  3. HQL সমর্থন করে না পত্রাঙ্কন ধারণা, কিন্তু আমরা মানদণ্ডের সঙ্গে পত্রাঙ্কন অর্জন করতে পারেন।
  4. এইচকিউএল এর চেয়ে কার্যকর করার জন্য মানদণ্ডে বেশি সময় লাগত।
  5. মানদণ্ডের সাহায্যে আমরা এসকিউএল ইঞ্জেকশনের সাথে তার গতিশীল ক্যোয়ারী প্রজন্মের সাথে সুরক্ষিত আছি তবে এইচকিউএলে আপনার প্রশ্নগুলি স্থির বা প্যারামাইট্রাইজড হওয়ার কারণে এসকিউএল ইঞ্জেকশন থেকে নিরাপদ নেই is

11
এইচকিউএল-তে কয়েক পয়েন্টের পৃষ্ঠা রয়েছে: আপনি এইচকিএল-তে ব্যবহার করতে পারেন limit offset:rows এসকিএল ইনজেকশনটি এড়াতে পারবেনsetParameter
বিশ্বনাথ লেকশমনান

13

উভয় পৃথিবীর সেরা ব্যবহার করতে, এইচকিউএল এর স্বতন্ত্রতা এবং সংক্ষিপ্ততা এবং মানদণ্ডের গতিশীল প্রকৃতি কোয়েরিএসএল ব্যবহার বিবেচনা করে ।

কোয়েরিডসেল জেপিএ / হাইবারনেট, জেডিও, এসকিউএল এবং সংগ্রহগুলি সমর্থন করে।

আমি ক্যুরিডসল এর রক্ষণাবেক্ষণকারী, সুতরাং এই উত্তরটি পক্ষপাতদুষ্ট।


13

আমার জন্য ক্রাইটেরিয়া ডায়নামিক কোয়েরি বোঝা এবং তৈরি করা বেশ সহজ। তবে আমি এখনও যে ত্রুটিটি বলছি তা হ'ল এটি সমস্ত একক সম্পর্কিত সমস্ত সম্পর্ককে বোঝায় কারণ আমাদের কাছে কেবল তিন প্রকারের ফেচমোড রয়েছে যেমন নির্বাচন করুন, প্রক্সি এবং ডিফল্ট এবং এই সমস্ত ক্ষেত্রে এটি একাধিকটি লোড করে (যদি আমি সহায়তা করি তবে আমি ভুল হতে পারি) আমাকে বাইরে :))

মাপদণ্ডের সাথে দ্বিতীয় সমস্যাটি হ'ল এটি সম্পূর্ণ বস্তুটি লোড করে, যদি আমি কেবল কোনও কর্মচারীর এম্পনেম লোড করতে চাই তবে এটি এটির সাথে আগত না হয়ে এটি সম্পূর্ণ কর্মচারী অবজেক্ট নিয়ে আসে এবং আমি এটিকে থেকে এমপিনেম পেতে পারি কারণ এটি সত্যই খারাপ কাজ করে in রিপোর্টিং । যেখানে এইচকিউএল সবেমাত্র লোড হয় (সংযুক্তি / সম্পর্ক লোড করেনি) আপনি যা চান তা পারফরম্যান্সকে বহুগুণ বাড়িয়ে তোলে।

মানদণ্ডের একটি বৈশিষ্ট্য হ'ল এটি এসকিউএল ইনজেকশন থেকে আপনাকে নিরাপদ করবে কারণ এটির গতিশীল ক্যোয়ারী প্রজন্মের কারণে যেখানে এইচকিউএল যেমন আপনার প্রশ্নগুলি স্থির বা পরামিতিযুক্ত তাই এসকিউএল ইঞ্জেকশন থেকে নিরাপদ নয়।

এছাড়াও আপনি যদি urspx.cs ফাইলগুলিতে এইচকিউএল লিখেন তবে আপনি আপনার ডালের সাথে দৃly়ভাবে মিলিত হন।

সামগ্রিকভাবে আমার উপসংহারটি হ'ল এমন জায়গাগুলি রয়েছে যেখানে আপনি এইচকিউএল ব্যতিরেকে রিপোর্টের মতো বাঁচতে পারবেন না সেগুলি ব্যবহার করুন অন্যথায় মানদণ্ড পরিচালনা করা আরও সহজ।


13
এইচকিউএল এসকিউএল ইঞ্জেকশন নিরাপদ নয়
বরুণ মেহতা

আমি মনে করি মানদণ্ড ইনজেকশন নিরাপদ নয়। আমার পোস্টটি এখানে দেখুন: stackoverflow.com/questions/6746486/…
মিস্টার স্মিথ

4
এইচকিউএল এসকিউএল ইনজেকশনটি 'সেটপ্যারামিটার' যোগ করে নিরাপদ
জাভাতর

2
@ জাফর: আপনি অনুমানগুলি ব্যবহার করে কোনও সত্তার কয়েকটি নির্দিষ্ট বৈশিষ্ট্য বেছে নিতে পারেন
রেজওয়ান ফ্ল্যাভিয়াস পান্ডা

@ জাফর আপনি নির্দিষ্ট কলামগুলি নির্বাচন করতে মানদণ্ডের ক্যোয়ারিতে প্রজেকশন সেট করতে পারেন। আপনি এমপনেম আনতে পারেন, সম্পূর্ণ অবজেক্ট আনার দরকার নেই।
খাতরী

12

মানদণ্ড এপিআই

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

অন্যদিকে, মাপদণ্ডের প্রশ্নগুলি কম ভাববাদী এবং এমনকি এই নিবন্ধে বর্ণিত হিসাবে খুব জটিল এবং অকার্যকর এসকিউএল কোয়েরিও করতে পারে ।

জেপিকিউএল এবং এইচকিউএল

এইচকিউএল জেপিকিউএল প্রসারিত করে এবং কিছু হাইবারনেট-নির্দিষ্ট বৈশিষ্ট্য যুক্ত করে, জেপিএল হ'ল জেপিএ মান সত্তা কোয়েরি ভাষা।

জেপিকিউএল এবং এইচকিউএল খুব এক্সপ্রেরিভ এবং এসকিউএল এর অনুরূপ। ক্রিটারিয়া এপিআইয়ের বিপরীতে, জেপিএকিউএল এবং এইচকিউএল জেপিএ সরবরাহকারী দ্বারা উত্পাদিত অন্তর্নিহিত এসকিউএল কোয়েরিটি পূর্বাভাস দেওয়া সহজ করে। নিজের মানদণ্ডের চেয়ে এইচকিউএল অনুসন্ধানগুলি পর্যালোচনা করাও অনেক সহজ।

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

উপসংহার

আপনার যদি সত্তা ক্যোয়ারী কাঠামোর পরিবর্তনের প্রয়োজন না হয়, তবে JPQL বা এইচকিউএল ব্যবহার করুন use আপনার যদি ফিল্টারিং বা বাছাইয়ের মানদণ্ড বা প্রক্ষেপণ পরিবর্তন করতে হয় তবে ক্রিটারিয়া এপিআই ব্যবহার করুন।

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



11

আমার জন্য ক্রিটারিয়ায় সবচেয়ে বড় জয় হ'ল উদাহরণ এপিআই, যেখানে আপনি কোনও বস্তু পাস করতে পারেন এবং হাইবারনেট সেই বিষয়গুলির বৈশিষ্ট্যের উপর ভিত্তি করে একটি কোয়েরি তৈরি করবে।

এগুলি ছাড়াও, মানদণ্ডের এপিআই-এর বিভিন্ন গ্লাস রয়েছে (আমি বিশ্বাস করি হাইবারনেট টিম এপিআই পুনরায় কাজ করছে), যেমন:

  • একটি মানদণ্ড। ক্রিয়েটআলিয়াস ("আপত্তি") সম্ভাব্য বাহ্যিক যোগদানের পরিবর্তে অভ্যন্তরীণ যোগদানকে বাধ্য করে
  • আপনি দু'বার একই উরফ তৈরি করতে পারবেন না
  • কিছু বর্গক্ষেত্রের ক্লজের কোনও সাধারণ মানদণ্ডের সমষ্টি নেই (উপগ্রহের মতো)
  • প্রভৃতি

আমি যখন এসকিউএল এর অনুরূপ কোয়েরিগুলি চাই (ব্যবহারকারীদের থেকে মুছুন যেখানে স্থিতি = 'ব্লক করা হয়েছে'), তখন আমি এইচকিউএল ব্যবহার করি এবং আমি যখন স্ট্রিং সংযোজন ব্যবহার করতে চাই না তখন মানদণ্ড ব্যবহার করি tend

এইচকিউএল এর আর একটি সুবিধা হ'ল আপনি হাতের আগে আপনার সমস্ত প্রশ্নের সংজ্ঞা দিতে পারেন, এবং এমনকি কোনও ফাইল বা তাদের কাছে বহিরাগত করতে পারেন।


9

মানদণ্ড এপিআই একটি আলাদা বৈশিষ্ট্য সরবরাহ করে যা এসকিউএল বা এইচকিউএল সরবরাহ করে না। অর্থাত। এটি একটি ক্যোয়ারী সংকলন সময় পরীক্ষা করতে পারবেন।


7

আমরা শুরুতে আমাদের অ্যাপ্লিকেশনটিতে মূলত মানদণ্ড ব্যবহার করেছি তবে কার্য সম্পাদনের কারণে এটি এইচকিউএল প্রতিস্থাপনের পরে।
মূলত আমরা বেশ কয়েকটি যোগদানের সাথে খুব জটিল প্রশ্নগুলি ব্যবহার করছি যা মাপদণ্ডে একাধিক প্রশ্নের দিকে পরিচালিত করে তবে এইচকিউএল-তে খুব অনুকূলিত।
কেসটি হ'ল আমরা নির্দিষ্ট অবজেক্টের উপর কেবল কয়েকটি প্রোপেইটি ব্যবহার করি এবং সম্পূর্ণ অবজেক্টগুলিকে নয়। মানদণ্ডের সাথে সমস্যাটিও ছিল স্ট্রিং কনটেন্টেশন।
বলুন আপনার যদি এইচকিউএল ব্যবহারকারীর নাম এবং উপাধি প্রদর্শনের প্রয়োজন হয় তবে এটি বেশ সহজ (name || ' ' || surname)তবে ক্রোটিরিয়ায় এটি সম্ভব নয়।
এটি কাটিয়ে উঠতে আমরা রেজাল্ট ট্রান্সসরার ব্যবহার করেছি, যেখানে এমন পদ্ধতি ছিল যেখানে প্রয়োজনীয় ফলাফলের জন্য এই জাতীয় কনটেন্টেশন প্রয়োগ করা হয়েছিল।
আজ আমরা মূলত এইচকিউএল ব্যবহার করি:

String hql = "select " +
            "c.uuid as uuid," +
            "c.name as name," +
            "c.objective as objective," +
            "c.startDate as startDate," +
            "c.endDate as endDate," +
            "c.description as description," +
            "s.status as status," +
            "t.type as type " +
            "from " + Campaign.class.getName() + " c " +
            "left join c.type t " +
            "left join c.status s";

Query query =  hibernateTemplate.getSessionFactory().getCurrentSession().getSession(EntityMode.MAP).createQuery(hql);
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
return query.list();

সুতরাং আমাদের ক্ষেত্রে প্রত্যাবর্তিত রেকর্ডগুলি প্রয়োজনীয় বৈশিষ্ট্যের মানচিত্র।


1
মাপদণ্ডের সাহায্যে আপনি org.hibernate.criterion.CriteriaSpecifications.ALIAS_TO_ENTITY_MAP
AA

আমার অভিজ্ঞতায় মানচিত্রের তালিকা ফিরিয়ে দেওয়া খুব খারাপ পারফরম্যান্স করেছে। আমি অবজেক্ট অ্যারেগুলির তালিকা বা মটরশুটিগুলির একটি তালিকা ফেরত দিতে পছন্দ করি (আপনি সর্বদা আপনার নির্দিষ্ট ফলাফলের সেট অনুসারে একটি সিমের সংজ্ঞা দিতে পারেন)।
ল্লুইস মার্টিনেজ

7
  • এইচকিউএল হ'ল ডেটাতে সিলেক্ট এবং অ-বাছাই করা অপারেশন উভয়ই করা, কিন্তু মানদণ্ড কেবলমাত্র ডেটা বাছাইয়ের জন্য, আমরা মানদণ্ড ব্যবহার করে অ-বাছাই করা অপারেশন করতে পারি না
  • এইচকিউএল স্ট্যাটিক কোয়েরিগুলি কার্যকর করার জন্য উপযুক্ত, যেখানে গতিময় ডায়নামিক কোয়েরিগুলি কার্যকর করার জন্য উপযুক্ত
  • এইচকিউএল পৃষ্ঠাগুলি ধারণাটি সমর্থন করে না, তবে আমরা মানদণ্ডের সাহায্যে পৃষ্ঠাগুলি অর্জন করতে পারি
  • এইচকিউএল কার্যকর করার জন্য মানদণ্ডে আরও সময় লাগত
  • মানদণ্ডের সাহায্যে আমরা এসকিউএল ইঞ্জেকশনের সাথে তার গতিশীল ক্যোয়ারী প্রজন্মের সাথে সুরক্ষিত আছি তবে এইচকিউএলে আপনার প্রশ্নগুলি স্থির বা প্যারামাইট্রাইজড হওয়ার কারণে এসকিউএল ইঞ্জেকশন থেকে নিরাপদ নেই।

সূত্র


স্পষ্ট করার জন্য, হাইবারনেটের ক্রেটারিয়া এপিআই ব্যবহার করে মানদণ্ডের অনুসন্ধানগুলি অনুসন্ধানের জন্য উপলভ্য হতে পারে তবে জেপিএ মানদণ্ডের অনুসন্ধানগুলি নির্বাচনগুলি, আপডেটগুলি এবং মুছে ফেলার বিষয়টিকে অন্তর্ভুক্ত করে। দেখুন CriteriaUpdate<T>এবং CriteriaDelete<T>রেফারেন্সের জন্য।
নারোস

5

গতিশীলতার জন্য মানদণ্ডের কোয়েরি আমরা আমাদের ইনপুটগুলির উপর ভিত্তি করে কোয়েরি তৈরি করতে পারি..এইচকিএল ক্যোয়ারীর ক্ষেত্রে স্থির ক্যোয়ারী হয় একবার আমরা তৈরি করি আমরা যদি প্রশ্নের কাঠামো পরিবর্তন করতে পারি না।


2
তাই না। এইচকিউএল দিয়ে আপনি ':' সনাক্তকারী দিয়ে বৈশিষ্ট্যগুলি সেট করতে পারেন এবং তারপরে সেই বৈশিষ্ট্যগুলিকে অনন্য মান সহ প্রতিস্থাপন করতে পারেন। উদাহরণস্বরূপ, ক্যোয়ারী Q = सत्र.createQuery ("নির্বাচন করুন: my_table থেকে একটি মূল্য"); এবং তারপরে q.setParameter ("aValue", "কিছু_ কলাম_নাম");
ম্যাটসি

@ ম্যাটসি আপনার উদাহরণে আপনি প্যারামিটারের মান পরিবর্তন করছেন, কোয়েরির কাঠামো নয় not
জাজার

4

আমি এখানে একটি মৃত ঘোড়াটিকে লাথি মারতে চাই না, তবে এটি উল্লেখ করা গুরুত্বপূর্ণ যে মানদণ্ডের প্রশ্নগুলি এখন অবচয় করা হয়েছে। এইচকিউএল ব্যবহার করুন।


1

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


0

এখানে বেশিরভাগ উত্তর বিভ্রান্তিকর এবং উল্লেখ করা হয়েছে যা Criteria Queriesধীরে ধীরে ধীরে ধীরে HQL, যা আসলে এটি নয়।

আপনি যদি গভীর উদ্বেগ প্রকাশ করেন এবং কিছু পরীক্ষা করেন তবে দেখবেন নিয়মিত এইচকিউএল মানদণ্ডের ক্যোয়ারীগুলি আরও ভাল পারফর্ম করে

এবং মানদণ্ড অনুসন্ধানের সাথেও আপনি অবজেক্ট ওরিয়েন্টেড নিয়ন্ত্রণ পাবেন যা এইচকিউএল এর সাথে নেই

আরও তথ্যের জন্য এই উত্তরটি এখানে পড়ুন


0

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


0

এই পোস্টটি বেশ পুরানো। সর্বাধিক উত্তরগুলি হাইপারনেট মানদণ্ড সম্পর্কে কথা বলে, জেপিএ মানদণ্ড নয়। জেপিএ ২.১ যুক্ত করেছে ক্রেডিয়ারিয়াডিলিট / ক্রেটারিয়া আপডেট এবং অ্যান্টিটি গ্রাফ যা সঠিকভাবে আনতে পারে তা নিয়ন্ত্রণ করে। জাভা ওও হওয়ায় ক্রিয়ারিয়া এপিআই আরও ভাল। এজন্য জেপিএ তৈরি হয়। জেপিকিউএল সংকলিত হয়ে গেলে এসকিউএল অনুবাদ করার আগে এটিটি এএসটি ট্রি (ওও মডেল) এ অনুবাদ করা হবে।


-3

এইচকিউএল এসকিউএল ইঞ্জেকশনের মতো সুরক্ষা উদ্বেগের কারণ হতে পারে ।


11
এই সমস্যাগুলি এইচকিউএল দ্বারা নয়, তবে মৌলিক সফ্টওয়্যার বিকাশের অনুশীলনগুলি বোঝার অভাব দ্বারা সৃষ্ট নয়। আমি পাশাপাশি মানদণ্ড এপিআই দিয়ে এসকিএল ইনজেকশন আক্রমণগুলিতে কোড প্রোন তৈরি করতে পারি।
জেনস স্কাউডার

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