Домен проверяется, но не сохраняется - PullRequest
1 голос
/ 24 марта 2012

У меня есть следующие настройки.

Класс, скажем, Автомобиль с CarPart (принадлежит To = [автомобиль: Автомобиль]).

Когда я создаю автомобиль, я также хочу создать некоторые CarParts по умолчанию, поэтому я делаю

def car = new Car(bla bla bla)
def part = new CarPart(car:car)

Теперь, когда я делаю car.validate () или part.validate (), это выглядит нормально. Но когда я делаю if (car.save && part.save (), я получаю это исключение:

    2012-03-24 14:02:21,943 [http-8080-4] ERROR util.JDBCExceptionReporter  - Batch entry 0 insert into car_part (version, car_id, id) values ('0', '297', '298') was aborted.  Call getNextException to see the cause.
2012-03-24 14:02:21,943 [http-8080-4] ERROR util.JDBCExceptionReporter  - ERROR: value too long for type character varying(6)
2012-03-24 14:02:21,943 [http-8080-4] ERROR events.PatchedDefaultFlushEventListener  - Could not synchronize database state with session
org.hibernate.exception.DataException: Could not execute JDBC batch update

Stacktrace follows:
java.sql.BatchUpdateException: Batch entry 0 insert into car_part (version, deal_id, id) values ('0', '297', '298') was aborted.  Call getNextException to see the cause.
    at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2621)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1837)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2754)
    at $Proxy20.flush(Unknown Source)
    at ristretto.DealController$_closure5.doCall(DealController.groovy:109)
    at ristretto.DealController$_closure5.doCall(DealController.groovy)
    at java.lang.Thread.run(Thread.java:722)

Есть идеи?

1 Ответ

2 голосов
/ 24 марта 2012

Вызов validate действительно только для проверки ограничений.При сохранении происходит сбой в действительном сохранении базы данных (проверка не может это проверить).

Как правило, в Grails вы можете сделать это одним из 2 способов:

def car = new Car(bla bla)
car.save()
def carPart = new CarPart(car:car)
carPart.save()

или

def car = new Car(bla bla)
def carPart = new CarPart(bla bla)
car.addToCarParts(carPart)
car.save()
...