В соответствии со спецификацией Java Persistence API (JPA), если сущность
встраивает класс с помощью аннотации Embedded, то у встраиваемого
класса должна быть аннотация Embeddable, а не Entity.
В OpenJPA при наличии атрибута с аннотацией @Embedded,
ссылающегося на класс с аннотацией @Entity вместо
@Embeddable, этот класс рассматривается как встраиваемый, так как
он встраивается в другие сущности, а также как сущность, так как для класса
создается таблица.
В аналогичном случае EclipseLink генерирует исключительную ситуацию, так как класс может быть либо сущностью, либо встраиваемым классом.
Это правило находит аннотации @Embedded, ссылающиеся на классы, у
которых нет аннотации @Entity. Правило отмечает найденные
аннотации в зависимости от области проверки и наличия всех связанных классов.
Embedded ссылается на класс с аннотацией
Entity, то правило отмечает аннотацию Entity в этом классе.
Процедура исправления в этом случае зависит от того, как приложение использует класс: как сущность или как встраиваемый класс.
@Entity на аннотацию @Embeddable.@Embedded, и удалите аннотацию @Embedded.
Embedded находится в атрибуте, а встраиваемый класс
невозможно проверить из-за того, что он не находится в области проверки, то правило отмечает аннотацию Embedded.
Расширьте область анализа, включив в нее дополнительные классы, и повторите проверку, либо вручную убедитесь в правильности аннотации встраиваемого класса.
В следующем примере правило отметит аннотацию @Entity в классе EmbeddableEntity.
import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity общедоступный класс EmbeddedEntity { @Id private int id; @Embedded private EmbedableEntity ee
import javax.persistence.Entity; @Entity public class EmbeddableEntity { private int embedField; ... }
Для устранения неполадки вручную убедитесь в том, что класс
EmbeddableEntity не используется в качестве класса сущности,
поэтому можно изменить аннотацию @Entity на @Embeddable.
import javax.persistence.Embeddable; import javax.persistence.Id; @Entity общедоступный класс EmbeddedEntity { @Id private int id; @Embedded private EmbedableEntity ee
import javax.persistence.Embeddable; @Embeddable public class EmbeddableEntity { private int ; ... }
Для получения дополнительной информации об этой проблеме и других проблемах, возникающих при миграции OpenJPA в EclipseLink, обратитесь к руководству Миграция OpenJPA в EclipseLink JPA: преобразования.