【问题标题】:Grails one-to-one mapping that shares an ID共享 ID 的 Grails 一对一映射
【发布时间】:2014-09-07 11:26:20
【问题描述】:

我在 Grails 2.3.11 中有以下域类。它们映射到无法更改的旧数据库表。两个类共享一个名为 pidm 的 id:

class Person {
    Long pidm
    String firstName
    String middleName
    Bio bio

    static mapping = {
        id name: 'pidm', generator: 'assigned'
        bio column: 'pidm'
    }
}

class Bio {
    Long pidm
    String ssn
    String gender
    Date birthDate

    static mapping = {
        id name: 'pidm', generator: 'assigned'
    }
}

Bio 表中没有单独的person_id 列或类似的内容。应该通过pidm 进行一对一的映射。

目前我可以让它工作的唯一方法是在mapping 块中添加updateable: false, insertable: falsebio。如果我想更新和/或插入 Bio 实例怎么办?我有没有更好的方法来执行此操作并将pidm 列共享为 Person 类 AND 的 id 作为对 Bio 的引用?

【问题讨论】:

  • 生成器真的被“分配”并且主键是数字吗?遗留数据库中的这些表是否没有可用的序列?
  • 有,但我的应用不会创建新的 Person 或 Bio 对象。单独的系统处理这些表中条目的创建。

标签: hibernate grails grails-orm grails-domain-class


【解决方案1】:

您需要在 Bio 类和相关映射中进行以下更改:

  • 使用外部 ID 生成器

  • 引入hasOne/belongTo双向关系

  • 您还需要确保任何链接的元素属性不可插入或不可更新。

举个具体的例子

http://blog.swwomm.com/2011/09/grails-foreign-id-generator.html

其他参考资料

【讨论】:

  • 即使在一个没有其他内容的 grails 项目中,我似乎也无法让它为我工作。
  • @GailTerman,您需要更具体地了解您使用理想的一些代码和堆栈跟踪所尝试的内容。我回忆起一些“小”问题,同时试图在紧迫的期限内使其工作。我没有盲目地复制/粘贴引用文章中的代码。
猜你喜欢
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多