ربط قيم متعددة في السبات باستخدام إطار العمل

StackOverflow https://stackoverflow.com/questions/3812095

  •  26-09-2019
  •  | 
  •  

سؤال

أحاول بناء استعلام في إطار اللعب ، لدي

select * from Candidate c where (:schools member of c.schools) 

بعد ربط: المدرسة مع قائمة بعنصر واحد ، فإنه يعيد نتيجة ، ولكن إذا قمت بربط القائمة بعناصر متعددة لا يحدث شيء.

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: {vector} [select c from models.Candidate c where (:schools0_, :schools1_ member of c.schools)  group by c.id order by RAND()]

في الواقع أنا بحاجة إلى شيء مثل

select * from candidate where schools in (x,x,x,x,x);

العلاقة بين المرشح والمدرسة في الجدول المرتبط.

هل هناك أي طريقة لربط قيم متعددة؟

هل كانت مفيدة؟

المحلول

مع Hibernate ، يمكنك أيضًا استخدام القائمة نفسها مباشرة.

select c from Candidate c join c.schools as school where school.id in (:schools)

على سبيل المثال ، فإن نوع المعلمة: المدارس تتم كتابة معرفاتك ، على سبيل المثال List<Int> أو List<Long>.

نصائح أخرى

في الواقع وجدت مكان المشكلة - عضو في يمكن استخدامها فقط بقيمة واحدة وتعمل بشكل جيد. عندما نحتاج إلى استخدام قيم متعددة ، فإن الأفضل هو استخدام SQL القياسي في:

 select c from Candidate c inner join c.schools as school where school.id in (25980,25981)"

مطلوب الانضمام إلى الجداول المرتبطة - لا يمكننا استخدام C.Schools.Id ، لذلك نحن بحاجة إلى الانضمام الداخلي C.Schools مع الاسم المستعار لتحديد العمود.

أعتقد أنه يجب على جميع المبتدئين التحقق http://www.javatx.cn/hibernate/reference/en/html/queryhql.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top