В соответствии со спецификацией Java Persistence API (JPA) встраиваемый класс
не может содержат атрибут с аннотацией Id, если сущность
определяет атрибут с аннотацией EmbeddedId. Если задана и
аннотация EmbeddedId, и аннотация Id, то OpenJPA
игнорирует аннотацию Id, а EclipseLink генерирует исключительную ситуацию.
Это правило обнаруживает классы Embeddable, которые содержат атрибуты с аннотацией Аннотацией Id, затем правило помечает аннотации Id в зависимости от того, найдет ли оно сущность, которая ссылается на встраиваемый класс с помощью EmbeddedId аннотацию.
EmbeddedId ссылается на встраиваемый класс, имеющий
аннотацию Id, то правило отмечает аннотацию Id как серьезную неполадку. Аннотация Id необходимо удалить.
EmbeddedId, не найдена, правило отмечает эту проблему как предупреждение. Расширьте область
действия анализа, включив в нее все атрибуты с аннотацией
EmbeddedId, которые могут ссылаться на встраиваемый класс, и
повторите проверку, либо вручную убедитесь в том, что ни одна аннотация
EmbeddedId не ссылается на встраиваемый класс.
В следующем примере правило отметит аннотацию Id в классе EmbeddableObject.
import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public class MainEntity { @EmbeddedId private EmbedddableObject eo; }
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable public class EmbeddableObject { @Id private int ; ... }
Чтобы решить эту проблему, удалите аннотацию @Id и ее импорт.
import javax.persistence.Embeddable; import javax.persistence.Id; @Entity общедоступный класс MainEntity { @EmbeddedId private EmbedddableObject eo; }
import javax.persistence.Embeddable; @Embeddable public class EmbeddableObject { private int ; ... }
Для получения дополнительной информации об этой проблеме и других проблемах, возникающих при миграции OpenJPA в EclipseLink, обратитесь к руководству Миграция OpenJPA в EclipseLink JPA: преобразования.