1

我想知道以下场景是否是 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或任何其他类型,则应用程序启动正常。更改hasMany的Person类型也是如此。neighbours添加static transients = ['bestFriend']没有产生任何变化。

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

4

1 回答 1

0

我在这里尝试过,同样的问题发生了。一种解决方案是使用命名查询

class Person {

    static hasMany = [neighbours:Person]

    //static transients = ['bestFriend']

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

    static namedQueries  = {
        bestFriend {
        }
    }


    static constraints = {

    }
} 
于 2012-09-27T02:41:19.057 回答