テスト用のGrails2.1アプリでMySQL5.5.25の代わりにMongoDB2.0.6を使用しようとしましたが、いくつかの奇妙な問題が発生しています。
MySQLではなくMongoDBを使用する場合の問題:
Scaffoldingを使用している場合、静的制約を使用してフィールドを並べ替えることができません
制約としてinListを指定すると、MySQLバックエンドを使用するとドロップダウンが表示されますが、MongoDBバックエンドを使用するとフィールドが表示されます。
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.groovyとBuildConfig.groovyへの変更です。
不足している構成項目はありますか?
このNabbleフォーラムの投稿で、フィールドの順序がMongoDBの問題である可能性があると 誰かが言及しているのを見ました。
ただし、この投稿には詳細がありませんでした。
また、スキャフォールディングを使用するときにバックエンドデータベースエンジンがビューのレンダリング方法に影響を与える理由や方法もわかりませんでした。具体的には、ページとドロップダウンとテキストフィールドの順序です。
私はそれがドメインクラスのフィールドタイプと制約から来ると思っていたでしょう。
以前にMongoDBでGrails+Scaffoldingを使用したときに、この奇妙な動作に遭遇した人はいますか?誰かが修正を知っているか、何か洞察を持っていますか?
よろしくお願いします。