Каковы причины, по которым eclipselink не может автоматически определить классы сущностей? - PullRequest
1 голос
/ 13 октября 2009

Я запускаю eclipselink в контейнере OSGi, и мои классы сущностей находятся в их собственном пакете.

Я неоднократно сталкивался с проблемой, заключающейся в том, что Eclipselink не может автоматически определить классы сущностей, в результате чего появляются сообщения "Xyz не является известным типом сущности". Отладка этого болезненна, и мой несколько беспомощный подход заключается в том, чтобы более или менее произвольно настраивать файлы конфигурации, пока он не заработает.

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

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

Факты, которые я знаю:

  • eclipselink использует шаблон расширителя OSGi для прослушивания регистрации пакетов, а затем устанавливает их
  • он предположительно использует загрузчик классов для пакета, который определяет единицу сохранения, если вы используете persistence.xml для конфигурации, это пакет, в котором должен находиться этот файл.

Ответы [ 3 ]

1 голос
/ 16 апреля 2010

Eclipselink jpa не может сохранять объекты классов, которые расширяют классы сущностей. Эти расширенные классы должны быть самими классами сущностей.

0 голосов
/ 21 октября 2009

Класс сущности не указан явно в конфигурации модуля сохранения состояния, и persistence.xml (или любой другой используемый вами механизм конфигурации) не устанавливает для параметра exclude-unlisted-classes значение false (в зависимости от того, запускаете ли вы Java SE или EE, это может быть верно по умолчанию).

Если это помогает явно перечислить ваши классы, это может быть вашей проблемой.

0 голосов
/ 21 октября 2009

Пакет с классами сущностей не имеет правильного заголовка JPA-PersistenceUnits в своем манифесте. Этот заголовок показывает, как eclipselink обнаруживает, что существует единица сохранения, которая должна быть обработана.

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

...