سؤال

لدي رسم خرائط رائعة تبدو مثل هذا:

<class name="MyEntity">
  <set name="scalarSet" table="(select fk, scalar_value from other_table)">
    <key column="fk"/>
    <property column="scalar_value" type="long"/>
  </set>
</class

بالنظر إلى ذلك، كيف يمكنني الاستفسار بحيث تكون قيمة Simentity.scalarset (التي تم ضبطها) في مجموعة أخرى.

شيء مثل:

criteria.add(Restrictions.in("scalarSet", targetList));

تحرير] لقد حاولت أيضا تقييد.sqlrestriction (..). استعلام SQL الذي استخدمته هو شيء مثل هذا:

"1 == (select fk, scalar_value from other_table where fk = {alias}.id and scalar_value in ({expanding?})"

حيث يتم استبدال "{التوسع؟}" بعلامات استفهام مفصولة بفواصل (اعتمادا على القائمة المستهدفة. الحجم ()).

ولكن أنا فقط الحصول على

الناجمة عن: Org.hibernate.mapperexception: لم تكن المجموعة جمعية: Simentity.scalarset

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

المحلول

مجموعتك هي مجموعة، وليس رسم خرائط للجمعية - هناك اختلافات خفية ولكنها مهمة. استخدام API لاستعلام الإسبات للمجموعات حاليا غير مدعوم.

تحتاج إما إلى استخدام HQL، أو استخدم تعيين رابطة واحدة من خلال إنشاء كيان مع خاصية طويلة، على سبيل المثال:

public class Scalar {
  private Long value;
  public Long getValue() { .... }
  public void setValue(....) { ....}
}

نصائح أخرى

ومع ذلك، كتب شخص ما رقعة قماشية التي قد تنتهي أو لا ينتهي في السبات 3.4

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