【问题标题】:Grails: does belongsTo create a new column for a back reference?Grails:是否为反向引用创建新列?
【发布时间】:2014-11-17 14:33:21
【问题描述】:

我的代码看起来像

class Person {
    Nose nose
}

class Nose {
    static belongsTo = [person:Person]
}

这应该在“person”表上为 Nose 创建一个外键列,并在“nose”表上为 Person 创建一个反向引用列,对吧?

我现在没有为“鼻子”表上的反向引用生成列,我想知道这是否正常......

http://grails.org/doc/latest/ref/Domain%20Classes/belongsTo.html (似乎这就是文档所说的,但我认为我解释错了)

编辑: 我编辑了代码 sn-p 因为我写错了(今天没喝咖啡)

【问题讨论】:

  • belongsTo [nose:Nose] 中缺少的等号是错字吗(应该是belongsTo = [nose: Nose])?同样缺少static
  • 我的错,是的,我的实际代码中有 belongsTo = [nose:Nose] 。我现在就解决这个问题。

标签: mysql grails grails-orm grails-2.0


【解决方案1】:

在 grails 中,我们使用belongsTo 进行级联,你应该使用

class Nose {
belongsTo = [person:Person]
}

是的,如果是belongsTo,则反向引用将存储在具有person_idNose中。

【讨论】:

  • 对不起,阿卜杜拉,我的问题中有多个拼写错误。我有静态的 belongsTo = [person: Person]
  • 在这种情况下您是否得到异常结果,如果是比什么?
  • 至少没有错误。当我将 Person 的实例分配给 nose 的实例并保存时,我没有收到任何错误,但是当我从数据库中获取该实例时,person_id 设置为 null。我还看到鼻子表上没有 person_id 列(后参考)。
  • person_id 是错字吗?我认为您应该能够通过nose.person 获取Person 对象,并通过nose.personId 获取此对象ID。
  • @MarcinŚwierczyński 我在我的终端中使用 SQL 查询(因此是 person_id),我的主要问题是 grails/gorm 是否为反向引用创建了一个专用列。
【解决方案2】:

您应该引用鼻子中的人,而不是鼻子本身,如下所示:

class Person {
    Nose nose
}

class Nose {
    static belongsTo = [person: Person]
}

评论后编辑:啊,我明白了。现在我再次阅读您的问题,您是否希望在 NosePerson 中同时拥有 person_id 列和 nose_id 列?因为这在 GORM 中永远不会发生,至少不会自动发生 - 对于您的架构,每个文档只有 Person 表将包含一个 nose_id 列。

【讨论】:

  • 我写错了两次,对此感到抱歉。我有静态的 belongsTo = [person: Person]
猜你喜欢
  • 1970-01-01
  • 2015-06-18
  • 2010-10-11
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
相关资源
最近更新 更多