【问题标题】:How do I insert a record with a many-to-one foreign key with grails?如何使用 grails 插入具有多对一外键的记录?
【发布时间】:2009-08-09 17:47:23
【问题描述】:

我已经坚持了一天了!我刚刚开始使用 Grails/Groovy。

我有两个带有简单多对一外键的域类。简化一点,他们是“公司”

class Company {

    String name
    String city
    String state
    String ticker

    static constraints = {
        name(unique:true, maxSize:40)
        state(blank:true, maxSize:2)
        city(blank:true, maxSize:40)
        ticker(blank:true, maxSize:8)
    }
}

和签名者(可能属于公司)

class Signer {

    String firstName
    String lastName
    String city
    String state
    String zip
    String email
    Company company

    static constraints = {
        firstName(maxSize:40, blank:false)
        lastName(maxSize:40, blank:false)
        city(maxSize:40, blank:false)
        state(maxSize:2, blank:false)
        zip(maxSize:5, blank:false)
        email(maxSize:50, unique:true, email:true, blank:false)
        company(nullable:true)
    }
}

问题来了:

我不知道如何将新记录插入“签名者”并让公司字段包含 company_id 的值。

mysql> select * from signer;
+----+---------+-----------+------------+----------------------+------------+-----------+-------+-------+
| id | version | city      | company_id | email                | first_name | last_name | state | zip   |
+----+---------+-----------+------------+----------------------+------------+-----------+-------+-------+
|  1 |       0 | Sunnyvale |       NULL | swirsky@gmailAAA.com | Robert     | Swirsky   | CA    | 94087 | 
|  2 |       0 | Sunnyvale |       NULL | swirsky@gmailBBB.com | Robert     | Swirsky   | CA    | 11111 | 
|  3 |       0 | Sunnyvale |       NULL | swirsky@adobeCCC.com | Robert     | Swirsky   | CA    | 11111 | 

我尝试了以下方法:

   def s = new Signer(params)
   s.save()

其中 params 包含:

company_id 设置为现有公司记录的#

company 设置为现有公司记录的 # 的实例

公司域对象由 c = Company.get(id) // 其中 id 是有效公司的编号 params.company = c

我也试过了

params.company_id = c

这些都不起作用!当我在mysql中查看表时,company_id 列始终为空。

如何让它工作? Hibernate 在这里试图“太聪明”!我只想将记录号塞入 company_id!

【问题讨论】:

    标签: hibernate grails groovy


    【解决方案1】:

    绑定参数应该是 company.id 而不是 company_id。

    【讨论】:

      【解决方案2】:

      在您的 Signer 类中尝试添加:

       static belongsTo = Company
      

      除此之外,如果相应的公司记录被删除,签名者也会被删除。

      【讨论】:

      • 你不会只为一对一关系而不是多对一关系这样做吗?
      猜你喜欢
      • 1970-01-01
      • 2016-10-01
      • 2013-05-26
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多