Grails / MongoDB Morphia插件:

时间:2012-06-14 20:35:05

标签: mongodb grails morphia

我试图通过Mongodb Morphia插件(v.0.7.8)将Mongodb与Grails应用程序一起使用。我使用com.google.code.morphia.annotations.Entity Annotation注释了一个域类(在grails-app / mongo文件夹中不是):

import com.google.code.morphia.annotations.Entity

@Entity("Question")
class Question {
    Integer order
    String question
}

现在我正在尝试将新实体保存到控制器中的数据库中:

def index() {
    def q = new Question()
}
q.save()

但是会引发HTTP 500错误:

java.lang.IllegalStateException
Method on class [Question] was used outside of a Grails application. If running in the context of a test using the mocking API or bootstrap Grails correctly.

我做错了什么?

编辑:

我将我的域类移到了grails-app / mongo并删除了@Entity注释。现在错误消失了,但数据库仍然是空的?

EDIT2:

现在我明白了:

URI
/Survey/survey/index
Class
java.lang.NoSuchMethodException
Message
survey.Survey.<init>()

这个插件是严重错误的,或者它不像快速启动微型示例所暗示的那样容易设置。再说一遍:我做错了什么?

2 个答案:

答案 0 :(得分:0)

以下是有关如何使用该插件的用户指南http://jkuehn.github.com/gorm-mongodb/guide/2.%20Quickstart.html

此处提供了一个示例应用程序https://github.com/jkuehn/gorm-mongodb

答案 1 :(得分:0)

以下是您可以做的事情:

第一: 如果您像我一样来自GORM MongoDB,请尝试检查您的DataSource.groovy。并使用mongodb {}替换mongo {},以便mongodb-morphia可以工作。

第二: 编辑你的课程,并执行以下操作:

import com.google.code.morphia.annotations.Entity
@Entity
class Question {
   ///your code...
}

我注意到除非你从其他对象扩展,否则没有必要添加@Entity('Question')。

<强>编辑: 好的,在我看到你的错误信息和你的代码后,我意识到了一些事情,你在Controller动作方法之外调用q.save()。

这是你的代码:

def index() {
    def q = new Question()
}
q.save()

请尝试:

def index() {
    def q = new Question()
    q.save()
}