2009-08-09 2 views
0

Я застрял на этом уже целый день! Я только начинаю с Grails/Groovy.Как вставить запись с помощью многозначного внешнего ключа с grails?

У меня есть два класса домена с простым внешним ключом «один на один». Упрощенный немного, они «Компания»

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 | [email protected] | Robert  | Swirsky | CA | 94087 | 
| 2 |  0 | Sunnyvale |  NULL | [email protected] | Robert  | Swirsky | CA | 11111 | 
| 3 |  0 | Sunnyvale |  NULL | [email protected] | Robert  | Swirsky | CA | 11111 | 

Я попытался следующие:

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

где PARAMS содержит:

company_id набор на # существующей записи компании

компании набор для номер существующей записи компании - экземпляр

Компания предметная область задается с = Company.get (ид) // где идентификатор является # действительного компании params.company = с

Я также попытался это с

params.company_id = c 

Ни одна из этих работ не работает! Когда я смотрю на таблицу в mysql, столбец company_id всегда равен нулю.

Как я могу заставить это работать? Hibernate пытается быть «слишком умным» здесь! Я просто хочу записать номер записи в company_id!

ответ

0

Обязательный параметр должен быть company.id вместо company_id.

+0

Вот и все! благодаря – 2009-08-10 13:59:07

0

к классу подписывающего попробуйте добавить:

static belongsTo = Company 

Среди других вещей, если соответствующая запись компания будет удалена, так что будет подписавшего.

+0

Не могли бы вы сделать это только для отношений «один к одному», а не для отношений «один-к-одному»? – 2009-08-09 20:55:54

Смежные вопросы