将域 类 从 GORM 独立模块导入 Grails

Importing domain classes from GORM-standalone module into Grails

我有 2 块拼图:

1) 一个名为 core-module 的非 Grails 项目,带有独立的 GORM:

dependencies {
  compile 'org.grails:grails-datastore-gorm-mongodb:6.0.4.RELEASE'
  compile 'org.grails:grails-validation:3.2.3'
}    

和域 类 如:

import grails.gorm.annotation.Entity

@Entity
class Module {
  String id
  String tags
 }

GORM-ing 由

初始化
Map config = new Yaml().load this.class.getResource( '/application.yml' ).text
new MongoDatastore( config, Module, UserAccount )

和域 类 就像在 Grails 应用程序中一样工作。

2) 一个 Grails 3.2.3 应用程序:

dependencies {
  // default grails dependencies

  compile project( ':core-module' )
  compile 'org.grails.plugins:mongodb:6.0.4'
  compile 'org.grails.plugins:spring-security-core:3.1.1'
  // etc
}

GORM 初始化如下:

def config = config.grails.mongodb
log.info "using $config"
new MongoDatastore( config, Module, UserAccount )

并将其打印到日志文件中:

g.app.init.com.mozaiq.Application - using [host:localhost, port:27017, databaseName:theDB, username:theUN, pooled:true, mongoOptions:[connectionsPerHost:100, autoConnectRetry:true, connectTimeout:3000]]

问题是,属性 grailsApplication.domainClasses 是空的,即使 Module.collection 不是空的,Module.count() return 0 尽管集合不为空。

同样在我的 mongo-client 中,我看到在应用程序启动时创建了一个新数据库 test,其中包含一个空集合,由我的域 类 之一命名。如果我向其中插入一些文档,.count() returns 0 和 CRUD 列表仍为空。

出于性能原因,Grails 默认仅扫描应用程序中的包。在 Application class 中将 limitScanningToApplication() 覆盖为 return false 并通过在 Application 中覆盖 packageNames() 来定义您希望扫描的包] class.

Grails 然后会自动发现 Mongo GORM classes