【问题标题】:Grails hasOne property within same domain class同一域类中的 Grails hasOne 属性
【发布时间】: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']

我还尝试翻转backbackFace,但这也没有用。我在这里做错了什么?

【问题讨论】:

  • 您真的打算拥有两个属性,而不仅仅是一个吗?如果你想要一个 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


【解决方案1】:

下面试试

class Card {
    ...
    static hasOne = [back: BackFace]
}

class BackFace{
    Card card
}

【讨论】:

  • 我不想创建另一个域类来执行此操作。如果您可以按照 grails 文档中的说明使用 hasMany 做我想做的事情,那么一对一的关系不应该是可能的吗?
猜你喜欢
  • 2016-02-29
  • 1970-01-01
  • 2014-07-17
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
相关资源
最近更新 更多