تعيين قائمة في وضع السبات عن طريق الطلب بدلاً من حقل الفهرس

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

سؤال

هذا يعمل:

<hibernate-mapping>
    <class name="Train" table="Trains">

        <id column="id" name="id" type="java.lang.String" length="4">
            <generator class="assigned" />
        </id>
        <set name="trips" cascade="all">
            <key column="trainId"/>
            <one-to-many class="Trip"/>
        </set>

    </class>
</hibernate-mapping>

لكن رحلاتي كلها مرتبة بشكل طبيعي من خلالهم scheduledDate.أود أن أستبدل Set مع List.تغيير المجموعة إلى:

        <list name="trips" cascade="all" order-by="scheduledDate">
            <key column="trainId"/>
            <one-to-many class="Trip"/>
        </list>

لا يعمل، لأنه يتطلب الآن <index/>.لا أريد إضافة فهرس إلى طاولتي، لأنه يتم إعطاء الطلب حسب التاريخ.

بأي طريقة يمكن القيام بذلك؟أو ينبغي لي فقط الحصول على Set من السبات، ثم قم بفرزها بنفسي في التعليمات البرمجية؟يبدو غير ضروري عندما يكون لدينا طلب من قاعدة البيانات بالفعل.

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

المحلول

في الواقع، يمكن القيام بذلك مع <bag>, <set> أو <map> تعيينات. <bag> الاستخدامات java.util.List دلالات ولكنها لا تحافظ على فهارس العناصر.من خلال تحديد ذلك order-by السمة، سيتم ترتيب عناصرها كجزء من SELECT:

<bag name="trips" cascade="all" order-by="scheduledDate">
    <key column="trainId"/>
    <one-to-many class="Trip"/>
</bag>

لاحظ أن order-by السمة تحتاج إلى تحديد عمود الاسم (الأسماء)، وليس اسم الخاصية.يمكن تعيين ما سبق ل java.util.List, ، يمكنك أن تفعل الشيء نفسه مع java.util.Set باستخدام <set> رسم الخرائط.لا داعي للمقارنات :-)

التفاصيل هي هنا

نصائح أخرى

وأدركت أن استخدام List ليست الطريقة الصحيحة لتخزين مجموعة من العناصر أمر طبيعي.

والحل هو استخدام SortedSet (مثل TreeSet) مع Comparator.

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