المشاهدات SQL / قاعدة البيانات في الكؤوس المقدسة

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

  •  06-07-2019
  •  | 
  •  

سؤال

هل أحد يعرف ما هو أفضل نهج للوصول إلى طريقة عرض SQL من خلال الكؤوس المقدسة (أو إذا كان ذلك ممكنا حتى)؟ ويبدو وسيلة واضحة للقيام بذلك سيكون لاستخدام executeQuery ضد بغية تحديد مجموعة من الصفوف من الرأي الذي نحن لن علاج كقائمة من كائنات المجال. ومع ذلك، وحتى في هذه الحالة ليس من الواضح أي فئة المجال إلى تشغيل executeQuery ضد، لأن حقا نحن فقط باستخدام تلك الفئة نطاق من أجل تشغيل الاستعلام ضد كيان لا علاقة لها تماما (وجهة نظر).

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

[تحرير:
متابعة السؤال هنا: المجال الكؤوس المقدسة فئة دون الحقل ID أو مع الحقل مركب NULL جزئيا

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

المحلول

ويمكنك استخدام SQL عادي في الكؤوس المقدسة والتي هي في حالة الوصول إلى عرض الطريق الأفضل (IMO):

وعلى سبيل المثال في وحدة التحكم الخاصة بك:

import groovy.sql.Sql

class MyFancySqlController {

    def dataSource // the Spring-Bean "dataSource" is auto-injected

    def list = {
        def db = new Sql(dataSource) // Create a new instance of groovy.sql.Sql with the DB of the Grails app

        def result = db.rows("SELECT foo, bar FROM my_view") // Perform the query

        [ result: result ] // return the results as model
    }

}

والجزء الرأي:

<g:each in="${result}">
    <tr>
        <td>${it.foo}</td>
        <td>${it.bar}</td>
    </tr>
</g:each>

وآمل أن مصدر غني عن البيان. ويمكن الاطلاع على الوثائق هنا

نصائح أخرى

ويمكنك وضع هذا في تعيينات الفئة نطاقك:

static mapping = {
    cache 'read-only'
}

ولكن لست متأكدا ما اذا كان يساعد السبات فهم انها وجهة نظر ... <لأ href = "http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#performance- ذاكرة التخزين المؤقت للقراءة فقط "يختلط =" نوفولو noreferrer "> http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#performance-cache-readonly

وعلى أي حال، ونحن نستخدم قاعدة بيانات وجهات النظر كثيرا حيث الكؤوس المقدسة الطبقات المجال في المشروع الحالي لدينا، لHQL هو ألم في المؤخرة وانها أسهل لاستخدام SQL للانضمام الجداول.

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

وحل واحد هو (flush:true) عند حفظ مثيل المجال الذي كنت أعلم أنك سوف تحتاج إلى قراءة من خلال وجهة نظر بعد ذلك في المعاملة نفسها.

وسيكون باردا ولكن أن يكون نوعا من طريقة لمعرفة السبات أن عرض / نطاق التي تعتمد على الطبقات مجال أخرى، بحيث السبات التنظيف يعمل بشكل جيد بشكل مستمر.

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

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