创建名为'transactionManagerPostProcessor'的bean时出错:bean的初始化失败

时间:2016-02-23 12:21:17

标签: java hibernate grails groovy

完全错误:

  

org.springframework.beans.factory.BeanCreationException:创建名为'transactionManagerPostProcessor'的bean时出错:bean的初始化失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'transactionManager'的bean时出错:在设置bean属性'sessionFactory'时无法解析对bean'sessionFactory'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'sessionFactory'的bean时出错:init方法的调用失败;嵌套异常是org.hibernate.MappingException:关联引用未映射的类:java.util.List

以下是我的域类:

class File implements Serializable {

    String path;
    String name;

    public File(String path, String name) {
        this.path = path;
        this.name = name;
    }
}

class Directory extends File {

    List files = [];

    public Directory(String path, String name) {
        super(path, name);
    }
}

这是我的DirectoryService:

@Transactional
class DirectoryService {

    def fetchDirectory(String path) {
        java.io.File dir = new Path(path);
        java.io.File[] files = dir.listFiles();

        Directory pdirectory = new Directory(path, dir.getName());
        List list = [];
        for(java.io.File file : files) {
            File pfile = new File(path, file.getName());
            list.add(pfile);
        }
        pdirectory.files = list;
        return pdirectory;
    }
}

出现问题是因为我在目录模型类中有List files = []

我甚至不明白能够找到解决方案的问题。为什么Grails不允许我在模型中列出?如果实际上不允许,我想知道如何使它工作。

在我的应用程序中,我有许多模型,数据源不是数据库;在这种情况下,SQL关系等效于“Directory hasMany File”。目录本身也是文件的一个子集。

1 个答案:

答案 0 :(得分:1)

我发现如果没有初始化,Groovy会初始化对象。例如,List<File> files编译为List<File> files = new List<File>();。所以,我将类型更改为LinkedList,一切正常。