إرث رسم الخرائط في الكؤوس/GORM:مجال واحد في الدرجة جدولين في 1:N-العلاقة

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

  •  11-07-2019
  •  | 
  •  

سؤال

دعونا نقول لدي جدولين الموظف و الراتب مع 1:N العلاقة (راتب واحد يمكن أن تترافق مع العديد من الموظفين).

في سهل SQL الجداول سيكون انضم مع:

SELECT e.id, e.name, s.salary FROM employee e, salary s WHERE s.id = e.salary_id AND e.id = 12345;

على افتراض التالية GORM بالطاقة المجال الدرجة كيف يمكنني خريطة إرث بنية قاعدة البيانات إلى الصف ؟

class Employee {
   String name
   int salary
}

توضيح #1: أريد واحد فقط المجال الطبقة التي تحتوي على بيانات من كلا الجدولين.إضافة فئة أخرى ومن ثم ليس خيارا.

توضيح رقم 2: السؤال أنا أحاول أن أجد إجابة هو ببساطة "كيف يمكنني خريطة جدولين إلى فئة واحدة باستخدام الكؤوس/GORM"?إذا كنت تعتقد أنه من المستحيل أن تفعل ذلك ، ثم الرجاء توضيح ذلك بوضوح في الإجابة بدلا من محاولة تكرار السؤال.

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

المحلول

المنظمة البحرية الدولية ليس من الممكن مع عادي الكؤوس/GORM للانضمام إلى جداول متعددة ورسم خريطة لها إلى مجال واحد من الدرجة.كحل مؤقت يمكنك استخدام إرثا XML السبات رسم خرائط النفوذ الانضمام إلى الميزة لتحقيق هدفك المنشود.بالطبع سوف تفقد الكثير من GORM الأشياء الجيدة.

نصائح أخرى

SQL الخاصة بك على سبيل المثال يشير إلى أن هناك اثنين من الجداول الموظف و الراتب.وينبغي أن ينعكس ذلك في الفصول الدراسية.وذلك بدلا من واحد ، تحتاج إلى فئتين.على GORM الخرائط ثم تبدو مثل هذا.

class Employee {
   String name
   Salary salary
}

class Salary {
   static hasMany = [ employees : Employee ]
   int salary
}

انظر http://www.grails.org/GORM+-+Defining+relationships

يمكنك بدلا من الراتب و اسم الخصائص ، كما تحصل على* طرق في الواقع تشغيل استعلام على كل من هذه الجداول.

منح هذا ليس الكؤوس الطريق ، المستحسن أن كنت لا تتبع الكؤوس الطريق.

أنا لا أفهم تماما قيود على عدم القدرة على إضافة فئة أخرى إذا كان هناك 2 الجداول في قاعدة البيانات ، ولكن إذا كنت تبحث عن واجهة موحدة ، فإنه عمل تفويض الطرق إلى راتب الدرجة ؟

شيء من هذا القبيل:

class Salary {
    int amount
}

class Employee {
    Salary _salary
    String name

    String toString() { name }

    public Integer getSalary() {
        return _salary?.amount
    }
    public void setSalary(Integer amount) {
    // not quite sure of your business logic here, this is a guess
        _salary = Salary.findByAmount(amount)
        if (!_salary) {
            _salary = new Salary(amount: amount)
            _salary.save()
        }
    }
}


def e = new Employee(name:"willy loman", salary: 100)
e.save()
assert e.salary == 100

ومن الممكن أيضا أن كنت قد تكون قادرة على تقديم ما تطلبه العمل مع العرف السبات ملف التعيين, ولكن أنا لست على دراية كافية مع اللوي السبات بهذه الطريقة أن أقول على وجه اليقين.

ترى مخصص نوع المستخدم قسم من هذه الصفحة.

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