我想知道以下场景是否是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']
没有任何变化。
当使用复合键引用子对象时,此异常主要出现在我的搜索中,但我无法找到与此示例类似的情况。提前感谢您对此的任何帮助!
答案 0 :(得分:0)
我在这里尝试过同样的问题。一种解决方案是使用named queries。
class Person {
static hasMany = [neighbours:Person]
//static transients = ['bestFriend']
//public Person getBestFriend() {
// return null
// }
static namedQueries = {
bestFriend {
}
}
static constraints = {
}
}