0

a) データストア ドメイン クラスに属する連絡先アイテムを次のように保存しようとしています。

class Contacts implements Serializable{

    static belongsTo = [dataStore:DataStore]

    DataStore dataStore
    String emailaddress

クラス DS:

class DataStore implements Serializable{

    static belongsTo = [service:Service,user:User]
    static hasMany = [users:User,contacts:Contacts,groups:Groups]

    Service service
    User user
    User users
    List<Contacts> contacts

b) コントローラー レベルで、ajax リクエストとして連絡先を作成します。

def create() {
        String key = session["KEY"]
        DataStore ds = session["DS"]
        def user = springSecurityService.currentUser
        def c = new Contacts(dataStore:ds,emailaddress:params.contacts.email)
        if (c.validate()) {
            ds.addToContacts(c).save(flush:true)
            c.save()

c) 次のエラーにより、保存が妨げられます

failed to lazily initialize a collection of role: $$$.DataStore.contacts, no session or session was closed. Stacktrace follows:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: $$$.DataStore.contacts, no session or session was closed
    at $$$$.ContactsController$$EO4iccbg.create(ContactsController.groovy:115)
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
    at net.bull.javamelody.JspWrapper.invoke(JspWrapper.java:149)
    at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:259)
    at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:202)
    at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:175)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)

セッションがアクティブです...どういう意味ですか? この問題を解決するアイデアはありますか? ありがとう

4

1 に答える 1

1

GrailsOpenSessionInViewFilter について休止状態でしばらく調べた後、次のように dataStore セッションをリセットすることで、最終的に解決策にたどり着きました。

def dsx = DataStore.get(ds.id)
于 2013-05-02T23:37:53.567 に答える