Разве аннотация @AttributeOverride нарушает полиморфизм? - PullRequest
2 голосов
/ 11 февраля 2010

Мне нужна помощь с наследованием в JPA

Я проиллюстрирую мою проблему на примере:

Предположим, у нас есть класс Animal и класс Cat.

@Entity
@Table(name = "animal")
@DiscriminatorColumn(name="animal_type",columnDefinition="Integer",length=11)
public class Animal implements Serializable{
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column(name = "animal_id", nullable = false)
    private Long id;

    ...

}

@Entity
@Table(name = "cat")
@DiscriminatorValue("1")
@AttributeOverride(name="id",column=@Column(name="cat_id"))
public class Cat extends Animal {

    ...

}

Как показывает пример, я хочу использовать другое имя для моего столбца id в таблице cat

Но затем, когда я пытаюсь выполнить полиморфный запрос, запрашивающий все экземпляры Animal, я получаю ошибку Это похоже на то, что запрос не может обрабатывать разные имена полей в соответствии с экземпляром животного.

Я правильно делаю? Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

Вы можете попробовать использовать эту аннотацию. Я ставлю примеры

@PrimaryKeyJoinColumn(name="cat_id")
public class Cat extends Animal
0 голосов
/ 27 декабря 2011

Вы должны использовать аннотации @PrimaryKeyJoinColumn

0 голосов
/ 11 февраля 2010

Нет, наверное, нет.

Сначала я забыл аннотацию @Inheritance:

@Inheritance(strategy=InheritanceType.JOINED)

В любом случае я вижу, что могу переопределить остальные поля, но не Id. Или, возможно, проблема в том, что я использую идентификатор в запросе, но не остальные поля.

...