1

我想为学生写一个测试应用程序。所以有两种类型的类。Question包含许多Answer正确的答案。所以我有一对多和一对一的双向。

class Question extends Entity {

    static hasOne   = [ acceptedAnswer: Answer ]

    static hasMany  = [ answers: Answer ]
    static mappedby = [ answers: 'parentQuestion' ]

    static constraints = {
        acceptedAnswer unique: true
    }
}

class Answer  extends Entity {

    Question accesptedInQuestion

    //one of many answers
    static belongsTo = [ parentQuestion: Question] // when ANSWER bidirectional

    static constraints = {
    }
}

抽象实体是:

package com.medreactor.content.model

import org.bson.types.ObjectId

abstract class Entity {

    ObjectId post_id
    String posType  // Question OR ANSWER

    static mapping = {
        id column: 'post_id'
    }
}

我不断收到错误:

grails> run-app 
| Running Grails application
| Error 2013-09-05 10:30:50,805 [localhost-startStop-1] ERROR context.ContextLoader  - Context initialization failed
Message: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsDomainException: Property [answers] in class [class com.medreactor.content.model.Question] is a bidirectional one-to-many with two possible properties on the inverse side. Either name one of the properties on other side of the relationship [question] or use the 'mappedBy' static to define the property that the relationship is mapped with. Example: static mappedBy = [answers:'myprop']

怎么了?我正在映射答案,为什么编译器看不到这个?我错过了什么吗?

4

2 回答 2

0

Try to like this

Question.groovy

    class Question extends Entity{
         Answer acceptedAnswer
         static hasMany = [answers: Answer]
         static mappedBy = [answers: "parentQuestion"]
         static mapping = {
            answers cascade: 'all-delete-orphan'
         }
         static constraints = {
            acceptedAnswer unique: true
         }
    }

Answers.groovy

class Answer extends Entity {
    Question acceptedInQuestion
    Question parentQuestion

    static constraints = {
        acceptedInQuestion unique: true
    }
}
于 2013-09-05T10:14:03.300 回答
0

1.您的第一个解决问题的案例为问题实例和实例使用了相同的名称,所以您必须重命名它?在一对多中,即使为了可读性,它也必须参考问题

class Answer extends Entity{

        Question question   

        //one of many answers
        static belongsTo = [ questions:Question] // when ANSWER bidirectional // renamed

        static constraints = {
        }
    }

第二

class Question extends Entity {

    /*static hasOne   = [ acceptedAnswer: Answer ] you dont need this , you already said belongs to */
    Answer acceptedAnswer;

    static hasMany  = [ answers: Answer ]
    static mappedby = [ answers: 'parentQuestion' ] //parentQuestion Table

    static constraints = {
        acceptedAnswer unique: true
    }
}

3rd.try this并给予一些信任,谢谢!

于 2013-09-05T12:16:07.550 回答