5

テスト用のGrails2.1アプリでMySQL5.5.25の代わりにMongoDB2.0.6を使用しようとしましたが、いくつかの奇妙な問題が発生しています。

MySQLではなくMongoDBを使用する場合の問題:

  1. Scaffoldingを使用している場合、静的制約を使用してフィールドを並べ替えることができません

  2. 制約としてinListを指定すると、MySQLバックエンドを使用するとドロップダウンが表示されますが、MongoDBバックエンドを使用するとフィールドが表示されます。

  3. blank=false制約が指定されているフィールドには*(アスタリスク)はありません。

ドメインクラス

package study

class Student {

    String login
    String firstName
    String lastName
    String gender
    Boolean active

    Date dateCreated
    Date lastUpdated

    static constraints = {
        login()
        firstName(blank: false)
        lastName(blank: false)
        gender(inList: ['M', 'F'])
        active()
    }

}

コントローラ

package study

class StudentController {

    def scaffold = true
}

DataSource.groovy(MySQLのものはコメントアウトされています):

grails {
  mongo {
    host = "dev-linux"
    port = 27017
    username = "study"
    password= "********"
    databaseName = "study"
  }
}

//dataSource {
//    pooled = true
//    driverClassName = "com.mysql.jdbc.Driver"
//    dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
//    username = "study"
//    password = "********"
//    dbCreate = "create-drop" // one of 'create', 'create-drop','update'
//    url = "jdbc:mysql://dev-linux:3306/study"
//
//}
//hibernate {
//    cache.use_second_level_cache = true
//    cache.use_query_cache = true
//    cache.provider_class = "net.sf.ehcache.hibernate.EhCacheProvider"
//}

BuildConfig.groovy(表示されているプラ​​グインセクションは、MySQLの代わりにMongoDBを配置するために変更したすべてのものであり、このファイルの残りの部分はGrailsによって作成されたデフォルトです)

plugins {
      // build ":hibernate:$grailsVersion"
      // compile ":mysql-connectorj:5.1.12"

      compile ":mongodb:1.0.0.GA"
      build ":tomcat:$grailsVersion"

}

MongoDBに入れてMySQLを取り出すために行った唯一の変更は、上記のDataSource.groovyBuildConfig.groovyへの変更です。

不足している構成項目はありますか?

このNabbleフォーラムの投稿で、フィールドの順序がMongoDBの問題である可能性があると 誰かが言及しているのを見ました。

ただし、この投稿には詳細がありませんでした。

また、スキャフォールディングを使用するときにバックエンドデータベースエンジンがビューのレンダリング方法に影響を与える理由や方法もわかりませんでした。具体的には、ページとドロップダウンとテキストフィールドの順序です。

私はそれがドメインクラスのフィールドタイプと制約から来ると思っていたでしょう。

以前にMongoDBでGrails+Scaffoldingを使用したときに、この奇妙な動作に遭遇した人はいますか?誰かが修正を知っているか、何か洞察を持っていますか?

よろしくお願いします。

4

1 に答える 1

2

MongoDBでの足場は機能しますが、問題は、mongodbプラグインをインストールするだけで、あいまいなドメインマッピングが表示され、これらのようなエラーがポップアップ表示されることです。次のいずれかを行う必要があります。

  • 次のように休止状態のプラグインを削除します。

    grails uninstall-plugin hibernate
    

    また、BuildConfig.groovyから次の行を削除します。

    runtime ":database-migration:1.1"
    runtime ":hibernate:$grailsVersion"
    
  • この行を追加することで、特定のドメインがMongoによって永続化されていることを明示的に伝えます。

    static mapWith="mongo"
    
于 2012-08-19T21:30:13.683 に答える