Почему я не могу переопределить и аннотировать метод получения для сопоставления сущностей?

Учитывая этот класс:

@MappedSuperclass
public abstract class AbstractEntity {

    int id;
    public void setId(int id) { this.id = id; }
    public int getId() { return id; }

    // other mappings
}

Я хочу определить сущность:

@Entity
public class SomeEntity extends AbstractEntity {

    @Override
    @Id // or @OneToOne etc.
    public int getId() { return id; }
}

Но это не удается с ошибкой «Идентификатор не указан» (или «Не удалось определить тип для») в SomeEntity. Если я удалю геттер из суперкласса, он сработает. Разве я не могу использовать эту стратегию переопределения? Почему бы и нет, а если да, то как?

Добавление

@AttributeOverride(name = "id", column = @Column(name = "ID"))

к подклассу не изменяет ошибку.


person Mark    schedule 07.06.2017    source источник
comment
@crizzis Этот ответ не решает проблему.   -  person Mark    schedule 07.06.2017
comment
@ Крис Спасибо. So there is no way to... mark an existing field as the ID in a subclass. может сказать мне, что я пытаюсь сделать что-то не так. Какой из ответов я должен смотреть в ссылке, так как там есть противоречивые мнения.   -  person Mark    schedule 07.06.2017
comment
Какова цель, почему вы хотите это сделать? И покажите, пожалуйста, другие отображения в обоих классах.   -  person Popandopolos    schedule 07.06.2017
comment
Был только stackoverflow.com/a/13874900/496099, о котором я знаю, который показывает, как вы можете использовать доступ различия типов, чтобы избежать сопоставления «id» и других полей в базе, чтобы подклассы могли переопределять сопоставления. Т.е. используйте id_, пометьте его как переходный, затем укажите доступ к свойству в подклассе, который getId имеет аннотацию ID. Однако, как вы говорите, вероятно, есть лучший способ получить то, что вы хотите.   -  person Chris    schedule 07.06.2017
comment
@Popandopolos Вот что я хочу сделать: stackoverflow.com/questions/44362748/   -  person Mark    schedule 08.06.2017
comment
@Chris Тогда вы можете взглянуть на ссылку, которую я дал в предыдущем комментарии, может быть, вы можете что-то порекомендовать?   -  person Mark    schedule 08.06.2017


Ответы (1)


Для создания класса сущностей существуют требования, которым должен соответствовать класс. Бывший. должен иметь общедоступный/частный конструктор.

Вот список требований:

http://docs.oracle.com/javaee/5/tutorial/doc/bnbqa.html

Надеюсь это поможет.

person RostSunshine    schedule 07.06.2017
comment
Какое из требований не соответствует моему классу? - person Mark; 07.06.2017
comment
Насколько я вижу это: класс должен быть аннотирован аннотацией javax.persistence.Entity. - person RostSunshine; 07.06.2017
comment
Ну тогда я не уверен. Я знаю, что это, скорее всего, основная ошибка. Посмотрите ссылку из основного комментария - person RostSunshine; 07.06.2017