8

Grails 2.4.3 から 2.4.4 にアップグレードした後、Grails アプリケーションを起動するとエラーが発生し続けます。完全なエラーはここで読むことができます: http://pastebin.com/UXQ34JKD

2014-10-31 16:26:32 ERROR [context.GrailsContextLoaderListener] Error initializing the application: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is org.hibernate.MappingException: Association references unmapped class: java.util.List
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is org.hibernate.MappingException: Association references unmapped class: java.util.List
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is org.hibernate.MappingException: Association references unmapped class: java.util.List
        ... 4 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is org.hibernate.MappingException: Association references unmapped class: java.util.List
        ... 4 more
Caused by: org.hibernate.MappingException: Association references unmapped class: java.util.List
        ... 4 more

それはAssociation references unmapped class: java.util.List

どのドメイン クラスか、または実際に役立つ情報については言及されていません。いくつかのドメイン クラスを削除して原因を突き止めようとしましたが、アプリケーションが大きくてうまくいきませんでした。

これがトリガーされている場所とそれを修正する方法を理解するために、誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

10

何が問題なのかを調べる

最初に行う必要があるのは、問題の原因となっているフィールドを見つけることです。として宣言されたドメインクラスの任意のフィールドになる可能性がありますList

私の場合、プロジェクトが非常に初期段階にあり、ドメインがあまり多くないため、それらを見つけるのは簡単でした。

ただし、考えられる犯人セットを絞り込むための可能な解決策を見つけました。

興味深い部分は次のとおりです。

ひどいのは、AbstractGrailsDomainBinder の 436 行目にブレークポイントを設定し、状況を確認することです。

問題の修正

不適切なフィールドを見つけたら、回避策を実装します。

犯人がList authors次のようなドメイン クラスにいたとします。

class Book {
   List<Integer> authors // keeps author ids
} 

もちろん、リストを削除する必要があるため、解決策は次のようになります。

class Book {

    static transients = ['authors']

    String authorIds

    public void setAuthors(List<Integer> authorList) {
        this.authorIds = authorList ? authorList.join(";") : ''
    }

    public List<Integer> getAuthors() {
        return authorIds?.split(";")?.collect { it.toInteger() } ?: []
    }

} 

考えられる副作用

セッターを機能させるには、明示的に呼び出す必要があることに気付きました。

以前のバージョンの Grails では、次のコードがセッターを呼び出すことは間違いありません。

new Book(authors: [1, 2, 3])

しかし、Grails 2.4.4 では次のようにする必要があるようです。

def book = new Book()
book.setAuthors([1, 2, 3])
于 2014-10-31T23:50:19.463 に答える
-3

問題のあるインターフェイスを実際のクラスのものに置き換えてみてくださいList。たとえば、ArrayList

于 2014-11-02T16:38:41.727 に答える