如何使用grails插入带有多对一外键的记录?

时间:2009-08-09 17:47:24

标签: hibernate grails groovy

我已经被困在这一天了!我刚刚开始使用Grails / Groovy。

我有两个带有简单多对一外键的Domain类。简化了一下,它们就是“公司”

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)
    }
}

问题在于:

我无法弄清楚如何将新记录插入“Signer”并获取公司字段以包含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 设置为现有公司记录的号码

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

的实例

公司域对象设置     c = Company.get(id)//其中id是有效公司的#     params.company = c

我也用

尝试了这个
params.company_id = c

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

我如何让它工作? Hibernate试图在这里“过于聪明”!我只想把一个记录号推到company_id!

2 个答案:

答案 0 :(得分:0)

在Signer课程中尝试添加:

 static belongsTo = Company

除其他外,如果相应的公司记录被删除,签名者也将被删除。

答案 1 :(得分:0)

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