Нет, они этого не делают.
Я удалил все остальные аннотации и сократил наследование и оказался очень простым классом. Проблема осталась.
То, что не упоминалось в моем сообщении (потому что я думал, что это не имеет значения), было то, что я запускаю это внутри контейнера OSGi (если это имеет значение). Теперь такой контейнер защищает разные «пучки» друг от друга, поэтому они не могут видеть классы друг друга до тех пор, пока вы специально не «экспортируете» пакеты.
Аннотированные классы сидели в другом комплекте, нежели мой persistence.xml, и я предположил, что могу просто импортировать аннотированные классы из другого пакета и выполнять материал инициализации настойчивости в другом месте. Оказывается, я не могу, хотя я и не понял почему.
Таким образом, если вы используете JPA в сочетании с OSGi расслоения, вы должны убедиться, что:
- Аннотированные классы и persistence.xml вместе в одной связке
- это расслоение экспортирует пакет, содержащий аннотированные классы
- живучесть блока (ов), перечислены в файле манифеста сверток в
затем вы можете сделать фактические постоянство вещи (как вызов Ent ityManager.persist) в разных пакетах.
В качестве побочного примечания я получил similarly weird errors при попытке использовать аннотации JAXB через пучки. Кажется, что JAXBContext и/или ObjectFactory должны быть созданы в том же пакете, который содержит аннотированные классы. Я не мог нагнетать это, но вложение вещей в один и тот же комплект помогло.
Было бы здорово, если бы кто-то с более глубоким пониманием OSGi, загрузки классов и аннотаций мог прокомментировать, что может происходить здесь.
Update: экспорт/импорта соответствующих пакетов аннотаций могут позволить вам иметь persistence.xml и аннотированные классы в разных пучках, см here. Однако не проверял.
+1 для контрольного списка, это в целом весьма полезно. Тем не менее, я уже работал над этим, прежде чем я опубликовал. Я, наконец, решил, что это проблема с загрузкой класса, которую я до сих пор не понимаю, но все равно смог решить/обойти. Также см. Мой собственный ответ. –