GORM无法实现插件中的域类是GORM类

时间:2016-03-09 18:48:11

标签: grails spring-security gorm grails-plugin multi-project

我正在尝试使用Grails项目作为插件来基本上在插件中使用我的域类,然后在多个Grails项目中使用它们。

我已经这样做了:

grails create-app web

grails create-app插件

在两个项目的根目录中创建一个settings.gradle 包括'插件','网络'

然后我在插件中添加了spring security,并使用s2-quickstart创建了一个用户和一个角色域类,并为Bootstrap.groovy添加了一些默认用户。

单独启动插件项目并不会显示任何问题。

现在我将插件添加为Web项目的依赖项: 编译(':插件') 这样我可以从web项目中的插件访问域类,它编译得很好。我将spring配置添加到application.groovy,现在尝试使用web项目中插件的域类。

尝试这个但是我的项目没有正确启动它告诉我这个:

java.lang.IllegalStateException: Either class [htcommon.HtRole] is not a domain class or GORM has not been initialized correctly or has already been shutdown. If you are unit testing your entities using the mocking APIs

我的代码一旦尝试执行新的HtRole(...)。save()

似乎插件中的域类不会以某种方式被识别为GORM类。

2 个答案:

答案 0 :(得分:4)

域未被识别为GORM类的问题是由于其中提供的构造函数。这些构造函数是从s2-quickstart生成的,但是应该被删除(这是spring-security-core中的一个bug)。我删除了构造函数和你使用它们的一个地方我使用了map style default constructors。然后我修复了你必须得到当前用户的电话。

The repaired source is in this repo on GitHub(patch-1分支正在工作,master是OP的原始破解代码)

答案 1 :(得分:2)

在Grails 3.1.6中使用grails run-app运行包含GORM域的插件时收到了相同的错误消息。我通过提供用于初始化Hibernate的显式配置来解决问题,如下所示:

<强>的build.gradle:

dependencies {
    ...
    runtime "org.grails.plugins:hibernate4"
    runtime "org.hibernate:hibernate-ehcache"
}

<强>的grails-app / CONF / application.yml:

---
environments:
    development:
        hibernate:
            cache:
                queries: false
                use_second_level_cache: true
                use_query_cache: false
                region.factory_class: 'org.hibernate.cache.ehcache.EhCacheRegionFactory'

         dataSource:
             pooled: true
             jmxExport: true
             driverClassName: org.h2.Driver
             username: sa
             password:
             dbCreate: create-drop
             url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE