تعيين قائمة في وضع السبات عن طريق الطلب بدلاً من حقل الفهرس
-
07-07-2019 - |
سؤال
هذا يعمل:
<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
.