当getter返回同一个类时,自引用hasMany会抛出MappingException

时间:2012-09-26 19:36:00

标签: grails

我想知道以下场景是否是Grails错误,或者我是否只需要一种不同的方式来表示递归关系。

创建Grails 2.1.0应用程序(使用create-app)和下面的域类(使用create-domain-class)会在'grails run-app'上产生MappingException:

class Person {
    static hasMany = [neighbours:Person]

    public Person getBestFriend() {
        return null
    }
}

Caused by MappingException: Foreign key (FKC4E39B558E488775:person [])) must have same  number of columns as the referenced primary key (person [id])
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|   138 | run      in java.util.concurrent.FutureTask
|   886 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker
|   908 | run      in     ''
^   662 | run . .  in java.lang.Thread

如果getBestFriend()的返回类型为Object或任何其他类型,则应用程序启动正常。同样适用于更改Person hasMany的neighbours类型。添加static transients = ['bestFriend']没有任何变化。

当使用复合键引用子对象时,此异常主要出现在我的搜索中,但我无法找到与此示例类似的情况。提前感谢您对此的任何帮助!

1 个答案:

答案 0 :(得分:0)

我在这里尝试过同样的问题。一种解决方案是使用named queries

class Person {

    static hasMany = [neighbours:Person]

    //static transients = ['bestFriend']

    //public Person getBestFriend() {
//      return null
//  }

    static namedQueries  = {
        bestFriend {
        }
    }


    static constraints = {

    }
}