Как вставить запись с внешним ключом «многие к одному» с граалями? - PullRequest
0 голосов
/ 09 августа 2009

Я застрял на этом уже целый день! Я только начинаю работать с 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 установлен на номер существующей записи компании

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

Объект домена компании, установленный c = Company.get (id) // где id - номер действительной компании params.company = c

Я тоже пробовал это с

params.company_id = c

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

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

Ответы [ 2 ]

0 голосов
/ 10 августа 2009

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

0 голосов
/ 09 августа 2009

В свой класс Signer попробуйте добавить:

 static belongsTo = Company

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...