هل من الممكن أن الجزء الأكبر من حذف ارتباط العديد-عديدة مع HQL؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

وإذا كان الأمر كذلك، ما هو بناء الجملة؟

ونفترض أنني أريد مثيل فو أن يكون غير مرتبط من كافة مثيلات بار: في SQL سيكون ببساطة:

delete from FOO_BAR_MAPPING
where FOO_ID = ?

في HQL، أنا افترض أنه سيكون شيئا مثل:

delete from Bar.foos foos
where foos.id = :id

و(حيث فوس هي عبارة عن مجموعة من تعيين فو)

ولكن يبدو أن أكون مخطئا، وإعطاء:

org.hibernate.hql.ast.QuerySyntaxException: Bar.foos is not mapped

هل هذا ممكن حتى مع HQL؟

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

المحلول

للرد على سؤال محدد الخاص بك، لا، بقدر ما أنا على علم أنه لا يمكن مع HQL.

وأعتقد أنك خلط SQL وHQL هنا قليلا. في SQL، كنت في الواقع "حذف" السجلات، وبالطبع السبات سوف تفعل في نهاية المطاف ذلك أيضا. ومع ذلك تم تصميم السبات / HQL من عقلية وجوه المنحى، وذلك "حذف" في هذا السياق يعني أنك تقوم بحذف الأشياء، وليس الجمعيات. وعادة ما كنت تفعل شيئا مثل يلي:

Foo f = session.get(Foo.class, id);
f.getBars().clear();
session.merge(f);

وهذا باسترداد الكائن بواسطة معرف الذي حددته، ويزيل جميع نقابات المحامين عن طريق مسح انها مجموعة. ومن الواضح أن لديك لجمعية فو-البارات المعينة في الاتجاه الصحيح لهذا العمل.

نصائح أخرى

وإزالة جمعيات وحده هو غير ممكن مع HQL. ما يمكنك القيام به، ومع ذلك، هو إما:

وأ) على افتراض كنت أفعل ذلك لفو واحد ويتم تعيين شلال بشكل مناسب، يمكنك تحميل هذا المثال Foo، واضحة مجموعتها من bars وحفظه.

B) إذا كنت تحاول مسح bars من Foos متعددة يمكنك تعيين استعلام SQL بدلا من HQL

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