Как переопределить тип элемента коллекции в подклассе в спящем режиме? - PullRequest
0 голосов
/ 18 марта 2011

Например, тигр - это кошка, но у тигра не будет ребенка-кошки:

@Entity
class Cat {
    @OneToMany(targetEntity=Cat.class)
    Set<Cat> getChildren() { ... }
}

И Тигр:

@Entity
class Tiger extends Cat {
    @OneToMany(targetEntity=Tiger.class)
    Set<Cat> getChildren() { ... }
}

Проблема в том, что Hibernate не разрешит такое определение, как ошибка:

Repeated column in mapping for entity: com.bee32.plover.orm.Tiger column: parent (should be mapped with insert="false" update="false")

Есть идеи?

1 Ответ

2 голосов
/ 18 марта 2011

Мы делаем это, предоставляя файл XML (корневой элемент: ...), но зачем он вам нужен?

Обычно вы ограничиваете класс Tiger приемом только детей того же класса, поэтому getChildren() возвращает набор тигров.

В базе данных у вас будет дискриминатор, определяющий класс сущности набора данных в любом случае. Поэтому, если вы назначите набор данных с дискриминатором «CAT» (или аналогичным) в качестве дочернего элемента «TIGER», вы все равно получите исключение при загрузке ассоциации (поскольку объект будет иметь класс Cat и не может быть приведение к Tiger).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...