2015-10-28 2 views
1

При работе через учебник, чтобы начать обучение Grails, я сделал ошибку и побежал:Grails изменение пакета для класса домена вызвало DuplicateMappingException

grails create-domain-class com.FooBar 

вместо:

grails create-domain-class com.acme.FooBar 

Это было сразу очевидно, что я сделал ошибку, поэтому я попробовал следующее:

  1. Искал функцию, которая отменяет творчество e-domain-class, кажется, что его нет.
  2. Искал советы в Интернете, и консенсус в том, что вы можете удалить файл класса домена, любые связанные с ним представления и тесты, а затем безопасно запускать текстовый поиск для вашего имени класса в каталоге проекта для любых ссылок, которые могут быть у вас есть. пропущенный. Я сделал все это.
  3. Затем я выполнил правильную команду для создания com.acme.FooBar, который работал.

После этого приложение не запускается и сообщает следующее сообщение об ошибке:

org.hibernate.DuplicateMappingException: duplicate import: FooBar refers to both com.acme.FooBar and com.FooBar (try using auto-import="false") 

После добавления следующего кода com.acme.FooBar:

... 
static mapping = { 
    autoImport false 
} 
... 

приложение теперь работает в качестве ожидается.

Однако, как опытный разработчик Java, который иногда реорганизует пакет, я хотел бы понять, как это сделать, не вызывая исключение DuplicateMappingException или прибегая к решению «autoImport false».

Спасибо.

+0

Я бы удалил 'autoImport' и попробовал запустить« grails clean ». –

+0

Спасибо, Джошуа, удалил «autoImport», а затем побежал «grails clean», он сделал трюк! Я столкнулся со своей проблемой, прежде чем учебник рассмотрит эту основную команду. – Stryder

ответ

2

Вы не должны делать

static mapping = { 
     autoImport false 
    } 

As, делая это, вы сказали, что не проверяют домена только по имени и посмотреть на упаковку, а также. Следовательно, как только вы это сделаете, вам придется использовать Полностью квалифицированное имя класса в ваших запросах/hqls, которое может иногда чесаться.

Вы должны быть удаления домена полностью т.е.

  1. remove the Domain
  2. remove the view folder creating by default with very same name and so do the controller
  3. Now, do grails clean-all(Make it a thumb rule to use grails clean-all first for any issue unexpectedly occuring).
  4. To be more accurate do remove target directory from your project and then do run grails run-app.

я сделал То же самое много раз и получил его разрешаемые выше шагов.

Надеюсь, это поможет.

+0

Спасибо Vinay, удалил 'autoImport', а затем побежал' grails clean', он сделал трюк! Я столкнулся со своей проблемой, прежде чем учебник рассмотрит эту основную команду. – Stryder

+0

Упоминание нет! Хотя порекомендовал бы grails clean-all в таких случаях, когда grails clean доказывает тщетные усилия. –

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