Grails & JPA аннотации + файлы отображения гибернации. Как избавиться от этой ошибки? - PullRequest
0 голосов
/ 19 апреля 2011

Я пытаюсь повторно использовать некоторые классы сущностей с JPA-аннотациями в моем проекте.Но, к сожалению, я новичок в Hibernate и JPA тоже.Когда я пытаюсь сгенерировать контроллеры с помощью команды "grails generate-all", я получаю сообщение об ошибке:

Ошибка при запуске generate-all: Ошибка создания компонента с именем 'messageSource': Ошибка инициализации компонента;вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем'actionManager ': невозможно разрешить ссылку на компонент' sessionFactory 'при установке свойства компонента' sessionFactory ';вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'sessionFactory': сбой вызова метода init;Вложенное исключение - org.hibernate.PropertyNotFoundException: Не удалось найти установщик для версии свойства в примере класса. MyBean

Существует очень простое решение: добавьте поле «версия» с парой получатель / установщик.Но я не хочу менять свои классы сущностей, потому что, возможно, я захочу повторно использовать их в некоторых других проектах, не связанных с Grails.Есть ли способ использовать вместе аннотации JPA с файлами отображения гибернации, без дублирования уже использованных аннотаций в классах сущностей?

Да, а также, это хорошая идея или есть какой-то лучший подход?

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

Требуется ли оптимистическая блокировка? Я верю, что отключение этого излечит это.

Вы должны сделать это через конфигурацию hibernate, глобально или для каждого класса, используя атрибут class / optimistic-lock, или вы можете добавить аннотацию hibernate к классу, но это, очевидно, означает изменение класса и предполагает, что вы используя спящий режим.

Вы также можете использовать aop-компилятор для добавления в версию filed / getter / setter или аннотации в модель домена сборки

1 голос
/ 19 апреля 2011

В ваших файлах сопоставления xml есть:

<hibernate-mapping default-access="field">

default-access (необязательно - по умолчанию свойство): стратегия Hibernate должна использоваться для доступа ко всем свойствам.

Если установлено значение field, hibernate читает поля напрямую, без необходимости использования получателей.

Конечно, вам нужно иметь хотя бы поле.Вы не можете просто отобразить произвольные свойства, которые не существуют.(ну, может быть, вы можете с некоторой «магией», но я бы советовал против этого)

...