سؤال

وغالبا ما يكون من المفيد الحصول على حقل في DAO الذي يأتي من تعداد جافا القيمة. والمثال النموذجي هو DAO تسجيل الدخول حيث لديك عادة حقل الذي يميز المستخدم باسم "NORMAL" أو "ADMIN". في السبات، وأود أن استخدام الكائنات 2 التالية لتمثيل هذه العلاقة في (شبه) typesafe الطريقة:

class User {
    String username;
    String passwd;
    UserType type;
}

class UserType {
    private enum Type {ADMIN, NORMAL};
    private String type;

    //Setters/Getters for Hibernate
    public void setType(String type);
    public String getType();

    //Setters/Getters for user
    public void setUserType(UserType.Type t);
    public UserType.Type getUserType();

    public static UserType fromType(UserType.Type t);
}

وهذا يعمل، ولكن أجد الطبقة نوع المستخدم ungly وتتطلب الكثير من البيروقراطية فقط لتخزين اثنين من القيم. من الناحية المثالية، ينبغي أن السبات دعم مجالات التعداد مباشرة، وسوف إنشاء جدول إضافي لتخزين قيم التعداد.

وسؤالي هو: هل هناك أي طريقة لرسم خريطة مباشرة فئة تعداد في السبات؟ إن لم يكن، هو نمط بلدي لتمثيل التعدادات جيدة بما فيه الكفاية أو أنا في عداد المفقودين شيء؟ ما هي الأنماط الأخرى التي يستخدمها الناس؟

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

المحلول

وباستخدام السبات أو الشروح JPA:

class User {
   @Enumerated(EnumType.STRING)
   UserType type
}

ونوع المستخدم هو مجرد معيار جافا 5 التعداد.

لا أستطيع أن أتخيل هذا يقتصر على الشروح فقط ولكن أنا لا أعرف فعلا كيفية القيام بذلك مع ملفات HBM. قد يكون النسخة جدا تعتمد، وأنا على التخمين ولكن أنا متأكد من أن السبات مطلوب 3.2+.

وتحرير: من الممكن في HBM، ولكن هو فوضوي قليلا، وإلقاء نظرة على هذا <وأ href = "http://forum.hibernate.org/viewtopic.php؟p=2377095" يختلط = "noreferrer "> منتدى موضوع

نصائح أخرى

ومن وثائق السبات: http://www.hibernate.org/272.html

ويمكنك إنشاء typedef وجديد لكل من تتضمن التعدادات ومرجع typedefs في العلامة الممتلكات.

مثال لرسم الخرائط - المضمنة العلامة <type>

  <property name='suit'>
    <type name="EnumUserType">
      <param name="enumClassName">com.company.project.Suit</param>
    </type>
  </property>

مثال لرسم الخرائط - باستخدام <typedef>

  <typedef name="suit" class='EnumUserType'>
      <param name="enumClassName">com.company.project.Suit</param>
  </typedef>

  <class ...>
    <property name='suit' type='suit'/>
  </class>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top