Интерфейс отображения JPA как @Entity в EclipseLink - PullRequest
1 голос
/ 24 января 2012

Мне нужно отобразить интерфейс как сущность, чтобы использовать разные реализации в коллекциях.

@Entity
@Table(name = "OPTION")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING)
public interface FilterOption {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId();
    public void setId(Long id);
    public Object getValue();
...
}

Я получаю сообщение об ошибке:

Внутреннее исключение: исключение [EclipseLink-7161] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.ValidationException Исключение Описание: В классе сущности [class FilterOption] первичный ключ не указан.Он должен определять либо @Id, @EmbeddedId, либо @ IdClass.

Как видите, объявлен @Id.Как я могу решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Вы не можете отобразить интерфейсы как сущность. Что именно вы пытаетесь сделать?

Возможно, создайте абстрактный класс AbstractFilterOption и сделайте его Entity или MappedSuperclass.

EclipseLink имеет поддержку интерфейса, но в настоящее время нет аннотаций JPA. Вы можете определить дескриптор интерфейса для интерфейса, но у него не будет таблицы, он будет просто запрашивать его реализации. Вы также можете использовать аннотацию @VariableOneToOne для сопоставления взаимосвязи переменных на основе интерфейса.

См http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Interfaces

2 голосов
/ 24 января 2012

вы не можете отобразить сущности на интерфейсы, используя аннотации с eclipselink, очевидно .

На самом деле вы вообще не можете сопоставить сущность с интерфейсом, используя jpa или hibernate .

...