كيفية تأسيس جلسة السبات ضمن برنامج نصي الكؤوس المقدسة
سؤال
والسيناريو الكؤوس المقدسة التالية:
// Import.groovy
includeTargets << grailsScript("Bootstrap")
target(main: "Import some data...") {
depends(bootstrap)
def Channel = grailsApp.classLoader.loadClass("content.Channel")
def c
// works: saving a valid Channel succeeds
c = Channel.newInstance(title:"A Channel", slug:"a-channel", position:0).validate()
// doesn't work: saving an invalid Channel fails with exception
c = Channel.newInstance().validate()
// this line is never reached due to exception
println(c.errors)
}
setDefaultTarget(main)
وفشل مع استثناء:
<اقتباس فقرة>خطأ النصي تنفيذ استيراد: org.hibernate.HibernateException: لا جلسة السبات بد أن الخيط، والتكوين لا يسمح إنشاء واحدة غير المعاملات هنا
اقتباس فقرة>وعندما يتم استدعاء التحقق من صحة () على كائن مجال غير صالح. أود أن الناتج رسائل الخطأ عندما فشل التحقق من الصحة، ولكن يبدو أنني سوف تحتاج إلى تأسيس جلسة السبات من أجل القيام بذلك. أي شخص يعرف وسيلة للحصول على هذا الماضي؟
المحلول
والعثور على RunScript.groovy حيث يضع الدورة السبات بالنسبة لك، ثم يدير البرامج النصية التي تحددها كوسائط. كان علي أن أغير مصدر من السيناريو غانت (أعلاه) ببساطة:
// Import.groovy
def Channel = grailsApp.classLoader.loadClass("content.Channel")
def c
c = Channel.newInstance(title:"A Channel", slug:"a-channel", position:0).validate()
c = Channel.newInstance().validate()
println(c.errors)
وأنا قادرة على تشغيله مثل ذلك:
<اقتباس فقرة>و$> الكؤوس المقدسة البرامج النصية من النصي تشغيل / Import.groovy
اقتباس فقرة>نصائح أخرى
وأنا أفعل شيئا من هذا القبيل، وأنه يعمل بالنسبة لي ...
// Import.groovy
includeTargets << grailsScript("Bootstrap")
target(main: "Import some data...") {
depends(bootstrap)
// added this ------------------------------------------------------
def sessionFactory = appCtx.getBean("sessionFactory")
def session = SessionFactoryUtils.getSession(sessionFactory, true)
TransactionSynchronizationManager.bindResource(
sessionFactory, new SessionHolder(session))
// added this ------------------------------------------------------
def Channel = grailsApp.classLoader.loadClass("content.Channel")
def c
// works: saving a valid Channel succeeds
c = Channel.newInstance(title:"A Channel", slug:"a-channel", position:0).validate()
// doesn't work: saving an invalid Channel fails with exception
c = Channel.newInstance().validate()
// this line is never reached due to exception
println(c.errors)
}
setDefaultTarget(main)