我已经被困在这一天了!我刚刚开始使用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!
答案 0 :(得分:0)
在Signer课程中尝试添加:
static belongsTo = Company
除其他外,如果相应的公司记录被删除,签名者也将被删除。
答案 1 :(得分:0)
bind参数应该是 company.id 而不是company_id。