【发布时间】:2017-01-01 20:47:19
【问题描述】:
我有一个涉及我正在处理的卡片的域类。一些(但不是所有)卡片的背面引用另一张卡片。这是我的域类的样子:
package server
class Card {
// other properties
static hasOne = [back: card]
Card backFace
static constraints = {
back nullable: true, unique: true
backFace nullable: true
}
}
当我去运行应用程序时,Grails 给了我以下错误
org.hibernate.MappingException: hasOne 属性 [server.Card.back] 不是双向的。指定关系的另一方!
我尝试将以下内容添加到课程中,但似乎不起作用:
static mappedBy = [back: 'backFace']
我还尝试翻转back 和backFace,但这也没有用。我在这里做错了什么?
【问题讨论】:
-
您真的打算拥有两个属性,而不仅仅是一个吗?如果你想要一个
back可以选择引用另一张卡,只需删除Card backFace属性,因为它是多余的。 -
我打算只拥有 1 个属性。我也应该删除
mappedBy行吗?我删除了两者,仍然得到同样的错误。 -
如果你想成为单向的,只需删除行
static hasOne = [back: card]当然它是constraints和不必要的mappedBy语句。不要忘记在重新启动之前从数据库中删除表。 -
嗯,这似乎在一定程度上解决了我的问题。现在看起来我遇到了另一个问题,MySQL 说该表不存在:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'server.card' doesn't exist我的开发数据源的dbCreate设置为create-drop,所以我不确定它为什么会发生。我得检查一下我猜的网址 -
看起来我的问题与 MySQL 有关,因为使用 H2 数据库似乎工作正常。我会发布一个新问题
标签: java hibernate grails grails-orm